เบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเปƒเบ™ Firebase Test Lab. เบชเปˆเบงเบ™โ€‹เบ—เบต 1โ€‹: เป‚เบ„เบ‡โ€‹เบเบฒเบ™ iOSโ€‹

เบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเปƒเบ™ Firebase Test Lab. เบชเปˆเบงเบ™โ€‹เบ—เบต 1โ€‹: เป‚เบ„เบ‡โ€‹เบเบฒเบ™ iOSโ€‹

เบ‚เป‰เบญเบเบŠเบทเปˆ Dmitry, เบ‚เป‰เบญเบเป€เบฎเบฑเบ”เบงเบฝเบเป€เบ›เบฑเบ™เบ™เบฑเบเบ—เบปเบ”เบชเบญเบšเปƒเบ™เบšเปเบฅเบดเบชเบฑเบ” เบงเบดเบ—เบฐเบเบฒเบชเบฒเบ” MEL. เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบšเปเปˆเบ”เบปเบ™เบกเบฒเบ™เบตเป‰เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบชเปเบฒเป€เบฅเบฑเบ”เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบšเปเปˆเบ”เบปเบ™เบกเบฒเบ™เบตเป‰เบˆเบฒเบ เบซเป‰เบญเบ‡เบ—เบปเบ”เบฅเบญเบ‡ Firebase โ€” เบ„เบท, เบ”เป‰เบงเบโ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เบ‚เบญเบ‡โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบ iOS เป‚เบ”เบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เบžเบทเป‰เบ™โ€‹เป€เบกเบทเบญเบ‡ XCUITest.

เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เบ‚เป‰เบญเบเป„เบ”เป‰เบฅเบญเบ‡ Firebase Test Lab เบชเปเบฒเบฅเบฑเบš Android เปเบฅเป‰เบงเปเบฅเบฐเบกเบฑเบเบ—เบธเบเบขเปˆเบฒเบ‡, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบˆเบถเปˆเบ‡เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบžเบฐเบเบฒเบเบฒเบกเบงเบฒเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš iOS เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบขเบนเปˆเปƒเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ”เบฝเบงเบเบฑเบ™. เบ‚เป‰เบญเบเป„เบ”เป‰เป„เบ›เบซเบฒ Google เบซเบผเบฒเบเปเบฅเบฐเบšเปเปˆเปเบกเปˆเบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบญเบญเบเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบˆเบถเปˆเบ‡เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ‚เบฝเบ™เบšเบปเบ”เปเบ™เบฐเบ™เปเบฒเบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบ—เบตเปˆเบเบฑเบ‡เบกเบตเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบ.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš UI เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™ iOS, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ—เบปเบ”เบฅเบญเบ‡เปƒเบŠเป‰เบžเบงเบเบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เปƒเบ™เบกเบทเป‰เบ™เบตเป‰, เป‚เบ”เบเบšเปเบฅเบดเบชเบฑเบ” Good Corporation. เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบ—เบตเปˆเบชเบปเบ™เปƒเบˆ, เบเบดเบ™เบ”เบตเบ•เป‰เบญเบ™เบฎเบฑเบš cat.

เปƒเบ™เป€เบฅเบทเปˆเบญเบ‡, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡ - เบ„เบฑเบ‡เป€เบเบฑเบšเบชเปˆเบงเบ™เบ•เบปเบงเปƒเบ™ GitHub เปเบฅเบฐเบฅเบฐเบšเบปเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡ CircleCI. เบŠเบทเปˆเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปเบกเปˆเบ™ AmazingApp, bundleID เปเบกเปˆเบ™ com.company.amazingapp. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เบ—เบฑเบ™เบ—เบตเป€เบžเบทเปˆเบญเบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ•เปเปˆเบกเบฒ.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เปเบšเปˆเบ‡เบ›เบฑเบ™เบ›เบฐเบชเบปเบšเบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปƒเบ™เบ„เปเบฒเป€เบซเบฑเบ™.

1. เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡

เบชเป‰เบฒเบ‡เบชเบฒเบ‚เบฒเป‚เบ„เบ‡เบเบฒเบ™เปƒเบซเบกเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš UI:

$ git checkout develop
$ git pull
$ git checkout -b โ€œfeature/add-ui-testsโ€

เปƒเบซเป‰เป€เบ›เบตเบ”เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™ XCode เปเบฅเบฐเบชเป‰เบฒเบ‡ Target เปƒเบซเบกเปˆเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš UI [XCode -> File -> New -> Target -> iOS Testing Bundle], เปƒเบซเป‰เบกเบฑเบ™เบŠเบทเปˆเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡ AmazingAppUITests.

เบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเปƒเบ™ Firebase Test Lab. เบชเปˆเบงเบ™โ€‹เบ—เบต 1โ€‹: เป‚เบ„เบ‡โ€‹เบเบฒเบ™ iOSโ€‹

เป„เบ›เบ—เบตเปˆเบชเปˆเบงเบ™ Build Phases เบ‚เบญเบ‡ Target เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™ เปเบฅเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒ Target Dependencies - AmazingApp, เปƒเบ™ Compile Sources - AmazingAppUITests.swift.

เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบ”เบตเปเบกเปˆเบ™เบเบฒเบ™เปเบเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ Schemes เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš UI เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ [XCode -> Product -> Scheme -> New Scheme] เปเบฅเบฐเปƒเบซเป‰เบกเบฑเบ™เบŠเบทเปˆเบ”เบฝเบงเบเบฑเบ™: AmazingAppUITests.

เบเบฒเบ™เบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เบ•เป‰เบญเบ‡เบ›เบฐเบเบญเบšเบกเบตเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ•เบปเป‰เบ™เบ•เป - AmazingApp เปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš UI เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ - AmazingAppUITests - เป€เบšเบดเปˆเบ‡เบžเบฒเบšเบซเบ™เป‰เบฒเบˆเป

เบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเปƒเบ™ Firebase Test Lab. เบชเปˆเบงเบ™โ€‹เบ—เบต 1โ€‹: เป‚เบ„เบ‡โ€‹เบเบฒเบ™ iOSโ€‹

เบ•เปเปˆเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบซเบกเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš UI. เปƒเบ™ XCode, เปƒเบซเป‰เบ„เบฅเบดเบเปƒเบชเปˆเป„เบŸเบฅเปŒเป‚เบ„เบ‡เบเบฒเบ™เปเบฅเบฐเป„เบ›เบ—เบตเปˆเบชเปˆเบงเบ™เบ‚เปเป‰เบกเบนเบ™. เปƒเบซเป‰เบ„เบฅเบดเบเปƒเบชเปˆ "+" เปเบฅเบฐเบชเป‰เบฒเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบซเบกเปˆ, เบ•เบปเบงเบขเปˆเบฒเบ‡ XCtest. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”เป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เป€เบ•เบฑเป‰เบ™เบฅเปเบฒเบเบฑเบš tambourine เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบกเบฑเบ™เบกเบฒเบเบฑเบšเบเบฒเบ™เป€เบŠเบฑเบ™เบฅเบฐเบซเบฑเบ”.

เบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเปƒเบ™ Firebase Test Lab. เบชเปˆเบงเบ™โ€‹เบ—เบต 1โ€‹: เป‚เบ„เบ‡โ€‹เบเบฒเบ™ iOSโ€‹

เบกเบตเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบชเบฒเบกเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™: เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ•เบปเป‰เบ™เบ•เป, เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบซเบ™เปˆเบงเบเบ‡เบฒเบ™ (เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบฑเบ‡เบซเบกเบปเบ”, เบกเบฑเบ™เบกเบตเบขเบนเปˆ, เปเบกเปˆเบ™เบšเป?) เปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš UI เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡.

เป„เบ›เบ—เบตเปˆ Target AmazingApp, Build Settings tab, เบžเบฒเบเบชเปˆเบงเบ™เบเบฒเบ™เป€เบŠเบฑเบ™เบฅเบฐเบซเบฑเบ”. เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ XCtest, เป€เบฅเบทเบญเบ iOS Developer. เปƒเบ™ เบฎเบนเบšเปเบšเบšเบเบฒเบ™เป€เบŠเบฑเบ™เบฅเบฐเบซเบฑเบ”เบžเบฒเบ, เป€เบฅเบทเบญเบเบ„เบนเปˆเบกเบท. เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบšเปเปˆเป„เบ”เป‰เบชเป‰เบฒเบ‡เป‚เบ›เบฃเป„เบŸเบฅเปŒเบเบฒเบ™เบชเบฐเบซเบ™เบญเบ‡เป€เบ—เบทเปˆเบญ, เปเบ•เปˆเปเบ™เปˆเบ™เบญเบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเบกเบฑเบ™เปƒเบ™เบžเบฒเบเบซเบผเบฑเบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบ.

เบชเปเบฒเบฅเบฑเบš Target AmazingAppUITests เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™, เปเบ•เปˆเปƒเบ™เบ–เบฑเบ™ Product Bundle Identifier เบžเบงเบเป€เบฎเบปเบฒเปƒเบชเปˆ com.company.amazingappuitests.

2. เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™ Apple Developer Program

เป„เบ›โ€‹เบ—เบตเปˆโ€‹เบซเบ™เป‰เบฒโ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบœเบนเป‰โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒ Appleโ€‹, เป„เบ›โ€‹เบ—เบตเปˆโ€‹เปƒเบšโ€‹เบขเบฑเป‰เบ‡โ€‹เบขเบทเบ™โ€‹, เบ•เบปเบงโ€‹เบฅเบฐโ€‹เบšเบธโ€‹เปเบฅเบฐโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบชเปˆเบงเบ™โ€‹เปเบฅเบฐโ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹เป„เบ›โ€‹เบ—เบตเปˆโ€‹เบ–เบฑเบ™ App IDs เบ‚เบญเบ‡โ€‹เบฅเบฒเบโ€‹เบเบฒเบ™โ€‹เบ•เบปเบงโ€‹เบฅเบฐโ€‹เบšเบธโ€‹. เบชเป‰เบฒเบ‡ ID App เปƒเปเปˆเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ AmazingAppUITests เปเบฅเบฐ bundleID com.company.amazingappuitests.

เบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเปƒเบ™ Firebase Test Lab. เบชเปˆเบงเบ™โ€‹เบ—เบต 1โ€‹: เป‚เบ„เบ‡โ€‹เบเบฒเบ™ iOSโ€‹

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบกเบตเป‚เบญเบเบฒเบ”เบ—เบตเปˆเบˆเบฐเป€เบŠเบฑเบ™เบšเบปเบ”เบชเบญเบšเป€เบชเบฑเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ”เป‰เบงเบเปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, เปเบ•เปˆ ... เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ›เบฐเบเบญเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ›เบฐเบเบญเบšเบกเบตเบเบฒเบ™เบ›เบฐเบเบญเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เปเบฅเบฐเบ›เบฐเบเบญเบšเบ•เบปเบงเปเบฅเปˆเบ™เบ—เบปเบ”เบชเบญเบš. เบ•เบฒเบกเบ™เบฑเป‰เบ™เปเบฅเป‰เบง, เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเป€เบŠเบตเบ™เบเบฑเบšเบšเบฑเบ™เบซเบฒเบเบฒเบ™เป€เบŠเบฑเบ™ ID เบชเบญเบ‡เบกเบฑเบ”เบ”เป‰เบงเบเป‚เบ›เบฃเป„เบŸเบฅเปŒเบเบฒเบ™เบชเบฐเปœเบญเบ‡เบญเบฑเบ™เบ”เบฝเบง. เป‚เบŠเบเบ”เบต, เบกเบตเบเบฒเบ™เปเบเป‰เป„เบ‚เบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบชเบฐเบซเบ‡เปˆเบฒเบ‡เบฒเบก - Wildcard App ID. เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡ App ID เปƒเปเปˆ, เปเบ•เปˆเปเบ—เบ™เบ—เบตเปˆ Explicit App ID, เป€เบฅเบทเบญเบ Wildcard App ID เบ„เบทเบเบฑเบšเปƒเบ™เบฎเบนเบšเปœเป‰เบฒเบˆเป.

เบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเปƒเบ™ Firebase Test Lab. เบชเปˆเบงเบ™โ€‹เบ—เบต 1โ€‹: เป‚เบ„เบ‡โ€‹เบเบฒเบ™ iOSโ€‹

เปƒเบ™เบˆเบธเบ”เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš developer.apple.com เบชเบณเป€เบฅเบฑเบ”เปเบฅเป‰เบง, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบซเบผเบธเบ”เปœเป‰เบฒเบ•เปˆเบฒเบ‡เบšเบฃเบฒเบงเป€เบŠเบต. เปƒเบซเป‰เบ‚เบญเบ‡เป„เบ› เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเป€เบญเบเบฐเบชเบฒเบ™ Fastlane เปเบฅเบฐเบญเปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบˆเบฒเบเบ›เบปเบเป€เบ–เบดเบ‡เบ›เบปเบ.

เบœเบนเป‰เบญเปˆเบฒเบ™เบ—เบตเปˆเป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบงเปˆเบฒเป€เบžเบทเปˆเบญเปƒเบŠเป‰เบ›เบฐเป‚เบซเบเบ”เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบชเปˆเบงเบ™เบ•เบปเบงเปเบฅเบฐเบšเบฑเบ™เบŠเบตเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ—เบฑเบ‡ Apple Developer Program เปเบฅเบฐ Github. เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡ (เบ–เป‰เบฒเบ—เบฑเบ™เบ—เบตเบ—เบฑเบ™เปƒเบ”เบšเปเปˆเบกเบตเบชเบดเปˆเบ‡เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง) เบšเบฑเบ™เบŠเบตเบ‚เบญเบ‡เปเบšเบšเบŸเบญเบก [email protected], เบกเบฒเบเบฑเบšเบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบ—เบตเปˆเป€เบ‚เบฑเป‰เบกเปเบ‚เบ‡, เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบเบฑเบš developer.apple.com, เปเบฅเบฐเปเบ•เปˆเบ‡เบ•เบฑเป‰เบ‡เบกเบฑเบ™เป€เบ›เบฑเบ™เบœเบนเป‰เบšเปเบฅเบดเบซเบฒเบ™เป‚เบ„เบ‡เบเบฒเบ™. เบ•เปเปˆเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเปƒเบซเป‰เบšเบฑเบ™เบŠเบตเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡ repository github เบ‚เบญเบ‡เบšเปเบฅเบดเบชเบฑเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐเบชเป‰เบฒเบ‡ repository เบชเปˆเบงเบ™เบ•เบปเบงเปƒเบซเบกเปˆเบ—เบตเปˆเบกเบตเบŠเบทเปˆเป€เบŠเบฑเปˆเบ™ AmazingAppMatch.

3. เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒ Fastlane เปเบฅเบฐโ€‹เบœเบปเบ™โ€‹เบ›เบฐโ€‹เป‚เบซเบเบ”โ€‹เบเบฒเบ™โ€‹เปเบ‚เปˆเบ‡โ€‹เบ‚เบฑเบ™โ€‹

เป€เบ›เบตเบ” terminal, เป„เบ›เป‚เบŸเบ™เป€เบ”เบตเบ—เบตเปˆเบกเบตเป‚เบ„เบ‡เบเบฒเบ™เปเบฅเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ fastlane เบ•เบฒเบกเบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™ เบ„เบนเปˆโ€‹เบกเบทโ€‹เบขเปˆเบฒเบ‡โ€‹เป€เบ›เบฑเบ™โ€‹เบ—เบฒเบ‡โ€‹เบเบฒเบ™โ€‹. เบซเบผเบฑเบ‡เบˆเบฒเบเปƒเบชเปˆเบ„เปเบฒเบชเบฑเปˆเบ‡

$ fastlane init

เบ—เปˆเบฒเบ™เบˆเบฐเบ–เบทเบเป€เบ•เบทเบญเบ™เปƒเบซเป‰เป€เบฅเบทเบญเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ—เบตเปˆเบกเบตเบขเบนเปˆ. เป€เบฅเบทเบญเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบชเบตเปˆ - manual project setup .

เบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเปƒเบ™ Firebase Test Lab. เบชเปˆเบงเบ™โ€‹เบ—เบต 1โ€‹: เป‚เบ„เบ‡โ€‹เบเบฒเบ™ iOSโ€‹

เป‚เบ„เบ‡เบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบกเบตเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต fastlane เปƒเบซเบกเปˆ, เป€เบŠเบดเปˆเบ‡เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบชเบญเบ‡เป„เบŸเบฅเปŒ - Appfile เปเบฅเบฐ Fastfile. เบชเบฐเบซเบผเบธเบšเป‚เบ”เบเบซเบเปเป‰, เบžเบงเบเป€เบฎเบปเบฒเป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เป„เบงเป‰เปƒเบ™ Appfile, เปเบฅเบฐเบ‚เบฝเบ™เบงเบฝเบเปƒเบ™ Fastfile, เป€เบญเบตเป‰เบ™เบงเปˆเบฒ Lanes เปƒเบ™เบ„เปเบฒเบชเบฑเบš Fastlane. เบ‚เป‰เบญเบเบ‚เปเปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบญเปˆเบฒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบ—เบฒเบ‡เบเบฒเบ™: เป€เบงเบฅเบฒ, ะดะฒะฐ.

เป€เบ›เบตเบ” Appfile เปƒเบ™เบ•เบปเบงเปเบเป‰เป„เบ‚เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบ—เปˆเบฒเบ™เบกเบฑเบเปเบฅเบฐเป€เบญเบปเบฒเบกเบฑเบ™เป„เบ›เบซเบฒเปเบšเบšเบŸเบญเบกเบ•เปเปˆเป„เบ›เบ™เบตเป‰:

app_identifier "com.company.amazingapp"       # Bundle ID
apple_dev_portal_id "[email protected]"  # ะกะพะทะดะฐะฝะฝั‹ะน ะธะฝั„ั€ะฐัั‚ั€ัƒะบั‚ัƒั€ะฝั‹ะน ะฐะบะบะฐัƒะฝั‚, ะธะผะตัŽั‰ะธะน ะฟั€ะฐะฒะพ ะฝะฐ ั€ะตะดะฐะบั‚ะธั€ะพะฒะฐะฝะธะต iOS ะฟั€ะพะตะบั‚ะฐ ะฒ Apple Developer Program.
team_id "LSDY3IFJAY9" # Your Developer Portal Team ID

เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒ terminal เปเบฅเบฐเบญเบตเบ‡เบ•เบฒเบกเบ„เบนเปˆเบกเบทเบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเบˆเบฐ configure match.

$ fastlane match init
$ fastlane match development

เบ•เปเปˆเป„เบ›, เปƒเบชเปˆเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบฎเป‰เบญเบ‡เบ‚เป - repository, เบšเบฑเบ™เบŠเบต, เบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบˆเบฐ: เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป€เบ›เบตเบ”เป€เบ„เบทเปˆเบญเบ‡เปƒเบŠเป‰เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบ„เบฑเป‰เบ‡เบ—เบณเบญเบดเบ”, เบ—เปˆเบฒเบ™เบˆเบฐเบ–เบทเบเบ–เบฒเบกเปƒเบซเป‰เปƒเบชเปˆเบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เป€เบžเบทเปˆเบญเบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™. เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡ เบชเบณ เบ„เบฑเบ™เบซเบผเบฒเบเบ—เบตเปˆเบˆเบฐเบšเบฑเบ™เบ—เบถเบเบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบ™เบตเป‰; เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™เป€เบกเบทเปˆเบญเบ•เบฑเป‰เบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ CI!

เป„เบŸเบฅเปŒเปƒเบซเบกเปˆเป„เบ”เป‰เบ›เบฒเบเบปเบ”เบขเบนเปˆเปƒเบ™เป‚เบŸเบ™เป€เบ”เบต fastlane - Matchfile. เป€เบ›เบตเบ”เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบ•เบปเบงเปเบเป‰เป„เบ‚เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบ—เปˆเบฒเบ™เบกเบฑเบเปเบฅเบฐเบชเบฐเปเบ”เบ‡เบกเบฑเบ™เปเบšเบšเบ™เบตเป‰:

git_url("https://github.com/YourCompany/AmazingAppMatch") #ะกะพะทะดะฐะฝะฝั‹ะน ะฟั€ะธะฒะฐั‚ะฝั‹ะน ั€ะตะฟะพะทะธั‚ะพั€ะธะน ะดะปั ั…ั€ะฐะฝะตะฝะธั ัะตั€ั‚ะธั„ะธะบะฐั‚ะพะฒ ะธ ะฟั€ะพั„ะฐะนะปะพะฒ.
type("development") # The default type, can be: appstore, adhoc, enterprise or development
app_identifier("com.company.amazingapp")
username("[email protected]") # Your Infrastructure account Apple Developer Portal username

เบžเบงเบเป€เบฎเบปเบฒเบ•เบทเปˆเบกเบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”เป€เบžเบทเปˆเบญเป€เบŠเบฑเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™ Crashlytics เปเบฅเบฐ / เบซเบผเบท AppStore, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เป€เบžเบทเปˆเบญเป€เบŠเบฑเบ™ ID เบกเบฑเบ”เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™.

เปเบ•เปˆ, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบทเปˆ, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเป‰เบฒเบ‡ ID Wildcard เบžเบดเป€เบชเบ”เป€เบžเบทเปˆเบญเป€เบŠเบฑเบ™เบšเบปเบ”เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบ›เบตเบ” Fastfile เปเบฅเบฐเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เปƒเบซเบกเปˆ:

lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"  # ัะพะทะดะฐะตะผ ะพั‚ะดะตะปัŒะฝั‹ะน ะฑั€ะฐะฝั‡ ะดะปั development ัะตั€ั‚ะธั„ะธะบะฐั‚ะฐ ะดะปั ะฟะพะดะฟะธัะธ ั‚ะตัั‚ะพะฒะพะน ัะฑะพั€ะบะธ.
    )

end

เบšเบฑเบ™เบ—เบถเบเปเบฅเบฐเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ terminal

fastlane testing_build_for_firebase

เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆ fastlane เบชเป‰เบฒเบ‡เปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™เปƒเบซเบกเปˆเปเบฅเบฐเป€เบญเบปเบฒเปƒเบชเปˆเปƒเบ™ repository. เบเบดเปˆเบ‡เปƒเบซเบเปˆ!

เป€เบ›เบตเบ” XCode. เบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบกเบตเป‚เบ›เบฃเป„เบŸเบฅเปŒเบเบฒเบ™เบˆเบฑเบ”เบซเบฒเบ—เบตเปˆเบˆเบณเป€เบ›เบฑเบ™เบ‚เบญเบ‡เปเบšเบšเบŸเบญเบก Match Development com.company.*, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบ•เป‰เบญเบ‡เบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบชเปˆเบงเบ™เบเบฒเบ™เบชเบฐเปœเบญเบ‡เป‚เบ›เบฃเป„เบŸเบฅเปŒเบชเบณเบฅเบฑเบšเป€เบ›เบปเป‰เบฒเปเบฒเบ AmazingApp เปเบฅเบฐ AmazingAppUITests.

เบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเปƒเบ™ Firebase Test Lab. เบชเปˆเบงเบ™โ€‹เบ—เบต 1โ€‹: เป‚เบ„เบ‡โ€‹เบเบฒเบ™ iOSโ€‹

เบกเบฑเบ™เบเบฑเบ‡เบ„เบปเบ‡เบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เบ›เบฐเบเบญเบš. เปƒเบซเป‰เบ‚เบญเบ‡เป„เบ› เบ„เบฑเบ‡เป€เบเบฑเบšเบกเป‰เบฝเบ™ เป‚เบ„เบ‡เบเบฒเบ™ plugin เบชเปเบฒเบฅเบฑเบš fastlane เบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบชเบปเปˆเบ‡เบญเบญเบเป„เบ›เบเบฑเบ‡ Firebase Test Lab เปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ.

เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ„เบฑเบ”เบฅเบญเบเบˆเบฒเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเป€เบžเบทเปˆเบญเบงเปˆเบฒ lane testing_build_for_firebase เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡เป€เบ›เบฑเบ™เปเบšเบšเบ™เบตเป‰:


 lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"
    )

    scan(
      scheme: 'AmazingAppUITests',      # UI Test scheme
      clean: true,                        # Recommended: This would ensure the build would not include unnecessary files
      skip_detect_devices: true,          # Required
      build_for_testing: true,            # Required
      sdk: 'iphoneos',                    # Required
      should_zip_build_products: true,     # Must be true to set the correct format for Firebase Test Lab
    )

    firebase_test_lab_ios_xctest(
      gcp_project: 'AmazingAppUITests', # Your Google Cloud project name (ะบ ัั‚ะพะน ัั‚ั€ะพั‡ะบะต ะฒะตั€ะฝะตะผัั ะฟะพะทะถะต)
      devices: [                          # Device(s) to run tests on
        {
          ios_model_id: 'iphonex',        # Device model ID, see gcloud command above
          ios_version_id: '12.0',         # iOS version ID, see gcloud command above
          locale: 'en_US',                # Optional: default to en_US if not set
          orientation: 'portrait'         # Optional: default to portrait if not set
        }
      ]
    )

  end

เบชเปเบฒเบฅเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ„เบปเบšเบ–เป‰เบงเบ™เบชเบปเบกเบšเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ fastlane เปƒเบ™ CircleCI, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบญเปˆเบฒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™ เบ„เบฑเป‰เบ‡เบ”เบฝเบง, ะดะฒะฐ.

เบขเปˆเบฒเบฅเบทเบกเป€เบžเบตเปˆเบกเปœเป‰เบฒเบงเบฝเบเปƒเปเปˆเปƒเบชเปˆ config.yml เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

build-for-firebase-test-lab:
   macos:
     xcode: "10.1.0"   
   working_directory: ~/project
   shell: /bin/bash --login -o pipefail
   steps:
     - checkout
     - attach_workspace:
         at: ~/project
     - run: sudo bundle install     # ะพะฑะฝะพะฒะปัะตะผ ะทะฐะฒะธัะธะผะพัั‚ะธ
     - run:
         name: install gcloud-sdk   # ะฝะฐ mac ะผะฐัˆะธะฝัƒ ะฝะตะพะฑั…ะพะดะธะผะพ ัƒัั‚ะฐะฝะพะฒะธั‚ัŒ gcloud
         command: |
           ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null ; brew install caskroom/cask/brew-cask 2> /dev/null
           brew cask install google-cloud-sdk
     - run:
         name: build app for testing
         command: fastlane testing_build_for_firebase  # ะทะฐะฟัƒัะบะฐะตะผ lane ัะฑะพั€ะบะธ ะธ ะพั‚ะฟั€ะฐะฒะบะธ ะฒ firebase

4. เป€เบšเบฒเบฐเบ™เบฑเปˆเบ‡เบ—เบปเบ”เบชเบญเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เบซเบเบฑเบ‡? เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Firebase.

เปƒเบซเป‰เบ‚เบญเบ‡เบฅเบปเบ‡เป„เบ›เบชเบดเปˆเบ‡เบ—เบตเปˆเบšเบปเบ”เบ„เบงเบฒเบกเป„เบ”เป‰เบ–เบทเบเบ‚เบฝเบ™เบชเปเบฒเบฅเบฑเบš.

เบšเบฒเบ‡เบ—เบตเปเบญเบฑเบšเบฏเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปƒเบŠเป‰ Firebase เปƒเบ™เปเบžเบฑเบเป€เบเบ”เบŸเบฃเบต เบซเบผเบทเบšเบฒเบ‡เบ—เบตเบญเบฒเบ”เบšเปเปˆเปเบกเปˆเบ™เบ—เบฑเบ‡เปเบปเบ”. เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡, เป€เบžเบฒเบฐเบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบŸเบฃเบตเบซเบ™เบถเปˆเบ‡เบ›เบต (เป€เบขเบฑเบ™, เปเบกเปˆเบ™เบšเป?)

เบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบšเบšเบฑเบ™เบŠเบตเป‚เบ„เบ‡เบฅเปˆเบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ (เบซเบผเบทเบญเบทเปˆเบ™เป†, เบกเบฑเบ™เบšเปเปˆเบชเปเบฒเบ„เบฑเบ™), เปเบฅเบฐเป„เบ›เบ—เบตเปˆ เบซเบ™เป‰เบฒ Firebase console. เบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™เปƒเบซเบกเปˆเบ—เบตเปˆเบกเบตเบŠเบทเปˆเบงเปˆเบฒ AmazingAppUITests.

เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบˆเบฐ: เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเปƒเบ™ Fastfile in lane firebase_test_lab_ios_xctest เบžเบฒเบฃเบฒเบกเบดเป€เบ•เบต gcp_project เบ„เบงเบ™เบเบปเบ‡เบเบฑเบšเบŠเบทเปˆเป‚เบ„เบ‡เบเบฒเบ™.

เบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเปƒเบ™ Firebase Test Lab. เบชเปˆเบงเบ™โ€‹เบ—เบต 1โ€‹: เป‚เบ„เบ‡โ€‹เบเบฒเบ™ iOSโ€‹

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเบ”เบต.

เบขเปˆเบฒเบ›เบดเบ”เปเบ–เบš, เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบžเบฒเบเปƒเบ•เป‰เบšเบฑเบ™เบŠเบตเบ”เบฝเบงเบเบฑเบ™เปƒเบ™ Gcloud - เบ™เบตเป‰เปเบกเปˆเบ™เบกเบฒเบ”เบ•เบฐเบเบฒเบ™เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เบเบฑเบš Firebase เป€เบเบตเบ”เบ‚เบถเป‰เบ™เป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš gcloud console.

เบเบนเป‚เบเบเปเบฒเบฅเบฑเบ‡เปƒเบซเป‰ $ 300 เบชเปเบฒเบฅเบฑเบšเบ›เบต, เป€เบŠเบดเปˆเบ‡เปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” autotests เปเบกเปˆเบ™เป€เบ—เบปเปˆเบฒเบเบฑเบšเบ›เบตเบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบŸเบฃเบตเบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™. เบžเบงเบเป€เบฎเบปเบฒเปƒเบชเปˆเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบˆเปˆเบฒเบเป€เบ‡เบดเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบฅเปเบ–เป‰เบฒเบเบฒเบ™เบ–เบญเบ™เบ•เบปเบงเบ—เบปเบ”เบชเบญเบšเบ‚เบญเบ‡ $1 เปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบš $300 เป€เบ‚เบปเป‰เบฒเบšเบฑเบ™เบŠเบตเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบซเบผเบฑเบ‡เบˆเบฒเบเบซเบ™เบถเปˆเบ‡เบ›เบต, เป‚เบ„เบ‡เบเบฒเบ™เบˆเบฐเบ–เบทเบเป‚เบญเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป„เบ›เบชเบนเปˆเปเบœเบ™เบเบฒเบ™เบญเบฑเบ”เบ•เบฒเบžเบฒเบชเบตเบŸเบฃเบต, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเบฑเบ‡เบงเบปเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบชเบนเบ™เป€เบชเบเป€เบ‡เบดเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰.

เปƒเบซเป‰เบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเปเบ—เบฑเบšเบ—เบตเปˆเบกเบตเป‚เบ„เบ‡เบเบฒเบ™ Firebase เปเบฅเบฐเป‚เบญเบ™เบกเบฑเบ™เป„เบ›เบซเบฒเปเบœเบ™เบเบฒเบ™เบญเบฑเบ”เบ•เบฒเบžเบฒเบชเบตเบ‚เบญเบ‡ Blaze - เบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบชเบดเปˆเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เบˆเปˆเบฒเบเบ–เป‰เบฒเป€เบเบตเบ™เบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”.

เปƒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš gcloud, เป€เบฅเบทเบญเบเป‚เบ„เบ‡เบเบฒเบ™ Firebase เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เป€เบฅเบทเบญเบเบฅเบฒเบเบเบฒเบ™เป€เบกเบ™เบนเบซเบผเบฑเบ โ€œเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตโ€ เปเบฅเบฐเป€เบžเบตเปˆเบก API เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš Cloud เปเบฅเบฐ Cloud Tools Result API.

เบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเปƒเบ™ Firebase Test Lab. เบชเปˆเบงเบ™โ€‹เบ—เบต 1โ€‹: เป‚เบ„เบ‡โ€‹เบเบฒเบ™ iOSโ€‹

เบˆเบฒเบเบ™เบฑเป‰เบ™เป„เบ›เบ—เบตเปˆเบฅเบฒเบเบเบฒเบ™เป€เบกเบ™เบน โ€œIAM เปเบฅเบฐเบเบฒเบ™เบšเปเบฅเบดเบซเบฒเบ™โ€ -> เบšเบฑเบ™เบŠเบตเบšเปเบฅเบดเบเบฒเบ™ -> เบชเป‰เบฒเบ‡เบšเบฑเบ™เบŠเบตเบšเปเบฅเบดเบเบฒเบ™. เบžเบงเบเป€เบฎเบปเบฒเปƒเบซเป‰เบชเบดเบ”เปƒเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เป‚เบ„เบ‡เบเบฒเบ™.

เบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเปƒเบ™ Firebase Test Lab. เบชเปˆเบงเบ™โ€‹เบ—เบต 1โ€‹: เป‚เบ„เบ‡โ€‹เบเบฒเบ™ iOSโ€‹

เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ” API เปƒเบ™เบฎเบนเบšเปเบšเบš JSON

เบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเปƒเบ™ Firebase Test Lab. เบชเปˆเบงเบ™โ€‹เบ—เบต 1โ€‹: เป‚เบ„เบ‡โ€‹เบเบฒเบ™ iOSโ€‹

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™ JSON เบ—เบตเปˆเบ”เบฒเบงเป‚เบซเบฅเบ”เบกเบฒเป€เบฅเบฑเบเบ™เป‰เบญเบเบ•เปเปˆเบกเบฒ, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Test Lab เบชเปเบฒเป€เบฅเบฑเบ”.

5. เบเบฒเบ™เบ•เบฑเป‰เบ‡ CircleCI

เบ„เปเบฒเบ–เบฒเบกเบ—เบตเปˆเบชเบปเบกเป€เบซเบ”เบชเบปเบกเบœเบปเบ™เป€เบเบตเบ”เบ‚เบทเป‰เบ™ - เบˆเบฐเป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบเบฑเบšเบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™? เบเบปเบ™เป„เบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบเปเปˆเบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบฅเบฐเบ‚เปเป‰เบกเบนเบ™เบฅเบฐเบญเบฝเบ”เบญเปˆเบญเบ™เบญเบทเปˆเบ™เป†เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบขเปˆเบฒเบ‡เบ›เบญเบ”เป„เบž. เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบ„เบ‡เบเบฒเบ™ CircleCI, เป€เบฅเบทเบญเบเบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก

เบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเปƒเบ™ Firebase Test Lab. เบชเปˆเบงเบ™โ€‹เบ—เบต 1โ€‹: เป‚เบ„เบ‡โ€‹เบเบฒเบ™ iOSโ€‹
เปเบฅเบฐเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เบปเบงเปเบ›เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • เบเบฐเปเบˆ: GOOGLE_APPLICATION_CREDENTIALS
    เบ„เปˆเบฒ: เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เป„เบŸเบฅเปŒ json เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบšเบฑเบ™เบŠเบตเบšเปเบฅเบดเบเบฒเบ™ gcloud
  • เบเบฐเปเบˆ: MATCH_PASSWORD
    เบ„เปˆเบฒ: เบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ” github repository เบ”เป‰เบงเบเปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™
  • เบเบฐเปเบˆ: FASTLANE_PASSWORD
    เบ„เปˆเบฒ: เบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบšเบฑเบ™เบŠเบตเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡ Apple Developer Portal

เบžเบงเบเป€เบฎเบปเบฒเบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡, เบชเป‰เบฒเบ‡ PR เปเบฅเบฐเบชเบปเปˆเบ‡เปƒเบซเป‰เบซเบปเบงเบซเบ™เป‰เบฒเบ—เบตเบกเบ‡เบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบเบงเบ”เบชเบญเบš.

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš

เป€เบ›เบฑเบ™เบœเบปเบ™เบกเบฒเบˆเบฒเบเบเบฒเบ™เบซเบกเบนเบ™เปƒเบŠเป‰เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบตเปˆเบ”เบต, เบชเบฐเบ–เบฝเบ™เบฅเบฐเบžเบฒเบšเบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบงเบดเบ”เบตเป‚เบญเปƒเบ™เบซเบ™เป‰เบฒเบˆเปเบญเบธเบ›เบฐเบเบญเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบฅเบฐเบšเบธเบฎเบนเบšเปเบšเบšเบญเบธเบ›เบฐเบเบญเบ™ iPhone X, เปเบ•เปˆเบเบฐเบชเบดเบเปเบฒเบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบ„เบฑเบ”เป€เบฅเบทเบญเบเบ—เบตเปˆเบญเบธเบ”เบปเบกเบชเบปเบกเบšเบนเบ™เบˆเบฒเบเบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปเบฅเบฐเบชเบฐเบšเบฑเบš iOS.

เบชเปˆเบงเบ™เบ—เบตเบชเบญเบ‡เบˆเบฐเบ–เบทเบเบญเบธเบ—เบดเบ”เปƒเบซเป‰เบเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Firebase Test Lab เปเบšเบšเป€เบ—เบทเปˆเบญเบฅเบฐเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Android.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™