ืื ื• ืžื‘ืฆืขื™ื ื‘ื“ื™ืงื•ืช ืื™ื ืกื˜ืจื•ืžื ื˜ืœื™ื•ืช ื‘-Firebase Test Lab. ื—ืœืง 1: ืคืจื•ื™ืงื˜ iOS

ืื ื• ืžื‘ืฆืขื™ื ื‘ื“ื™ืงื•ืช ืื™ื ืกื˜ืจื•ืžื ื˜ืœื™ื•ืช ื‘-Firebase Test Lab. ื—ืœืง 1: ืคืจื•ื™ืงื˜ iOS

ืฉืžื™ ื“ืžื™ื˜ืจื™, ืื ื™ ืขื•ื‘ื“ ื›ื˜ืกื˜ืจ ื‘ื—ื‘ืจื” ืžื“ืข MEL. ื“ื™ ืœืื—ืจื•ื ื” ืกื™ื™ืžืชื™ ืœืขืกื•ืง ื‘ืคื™ืฆ'ืจ ืขื“ื›ื ื™ ื™ื—ืกื™ืช ืž Firebase Test Lab - ื›ืœื•ืžืจ, ืขื ื‘ื“ื™ืงื” ืื™ื ืกื˜ืจื•ืžื ื˜ืœื™ืช ืฉืœ ื™ื™ืฉื•ืžื™ iOS ื‘ืืžืฆืขื•ืช ืžืกื’ืจืช ื”ื‘ื“ื™ืงื” ื”ืžืงื•ืจื™ืช XCUITest.

ืœืคื ื™ ื›ืŸ, ื›ื‘ืจ ื ื™ืกื™ืชื™ ืืช Firebase Test Lab ืœืื ื“ืจื•ืื™ื“ ื•ืžืื•ื“ ืื”ื‘ืชื™ ื”ื›ืœ, ืื– ื”ื—ืœื˜ืชื™ ืœื ืกื•ืช ืœืฉื™ื ืืช ืชืฉืชื™ืช ื”ื‘ื“ื™ืงื” ืฉืœ ื”-iOS ืฉืœ ื”ืคืจื•ื™ืงื˜ ื‘ืื•ืชื” ื‘ืกื™ืก. ื”ื™ื™ืชื™ ืฆืจื™ืš ื”ืจื‘ื” ื‘ื’ื•ื’ืœ ื•ืœื ื”ื›ืœ ื”ืกืชื“ืจ ื‘ืคืขื ื”ืจืืฉื•ื ื”, ืื– ื”ื—ืœื˜ืชื™ ืœื›ืชื•ื‘ ืžืืžืจ ื”ื“ืจื›ื” ืœืžื™ ืฉืขื“ื™ื™ืŸ ืžืชืงืฉื”.

ืœื›ืŸ, ืื ื™ืฉ ืœืš ืžื‘ื—ื ื™ ืžืžืฉืง ืžืฉืชืžืฉ ื‘ืคืจื•ื™ืงื˜ iOS, ืืชื” ื›ื‘ืจ ื™ื›ื•ืœ ืœื ืกื•ืช ืœื”ืคืขื™ืœ ืื•ืชื ื‘ืžื›ืฉื™ืจื™ื ืืžื™ืชื™ื™ื ื”ื™ื•ื, ื‘ื—ื‘ื™ื‘ื•ืช ืขืœ ื™ื“ื™ Good Corporation. ืœืžืขื•ื ื™ื™ื ื™ื, ื‘ืจื•ื›ื™ื ื”ื‘ืื™ื ืœื—ืชื•ืœ.

ื‘ืกื™ืคื•ืจ, ื”ื—ืœื˜ืชื™ ืœื‘ื ื•ืช ืขืœ ื›ืžื” ื ืชื•ื ื™ื ืจืืฉื•ื ื™ื™ื - ืžืื’ืจ ืคืจื˜ื™ ื‘-GitHub ื•ืžืขืจื›ืช ื”ื‘ื ื™ื™ื” CircleCI. ืฉื ื”ืืคืœื™ืงืฆื™ื” ื”ื•ื AmazingApp, bundleID ื”ื•ื com.company.amazingapp. ืื ื™ ืžืฆื™ื’ ืืช ื”ื ืชื•ื ื™ื ื”ืืœื” ื‘ืื•ืคืŸ ืžื™ื™ื“ื™ ื›ื“ื™ ืœื”ืคื—ื™ืช ืืช ื”ื‘ืœื‘ื•ืœ ื”ื‘ื.

ืื ื™ื™ืฉืžืช ืคืชืจื•ื ื•ืช ืžืกื•ื™ืžื™ื ื‘ืคืจื•ื™ืงื˜ ืฉืœืš ื‘ืฆื•ืจื” ืฉื•ื ื”, ืฉืชืฃ ืืช ื”ื—ื•ื•ื™ื” ืฉืœืš ื‘ื”ืขืจื•ืช.

1. ื”ืžื‘ื—ื ื™ื ืขืฆืžื

ืฆื•ืจ ืขื ืฃ ืคืจื•ื™ืงื˜ ื—ื“ืฉ ืขื‘ื•ืจ ืžื‘ื—ื ื™ ืžืžืฉืง ืžืฉืชืžืฉ:

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

ื‘ื•ืื• ื ืคืชื— ืืช ื”ืคืจื•ื™ืงื˜ ื‘-XCode ื•ื ื™ืฆื•ืจ ื™ืขื“ ื—ื“ืฉ ืขื ืžื‘ื—ื ื™ ืžืžืฉืง ืžืฉืชืžืฉ [XCode -> ืงื•ื‘ืฅ -> ื—ื“ืฉ -> ื™ืขื“ -> ื—ื‘ื™ืœืช ื‘ื“ื™ืงื•ืช iOS], ื•ื ืขื ื™ืง ืœื• ืืช ื”ืฉื ื”ืžื•ื‘ืŸ ืžืืœื™ื• AmazingAppUITests.

ืื ื• ืžื‘ืฆืขื™ื ื‘ื“ื™ืงื•ืช ืื™ื ืกื˜ืจื•ืžื ื˜ืœื™ื•ืช ื‘-Firebase Test Lab. ื—ืœืง 1: ืคืจื•ื™ืงื˜ iOS

ืขื‘ื•ืจ ืœืงื˜ืข Build Phases ืฉืœ ื”ื™ืขื“ ืฉื ื•ืฆืจ ื•ื‘ื“ื•ืง ืืช ื ื•ื›ื—ื•ืชื ืฉืœ Target Dependencies - AmazingApp, ื‘-Compile Sources - AmazingAppUITests.swift.

ืชืจื’ื•ืœ ื˜ื•ื‘ ื”ื•ื ืœื”ืคืจื™ื“ ืืคืฉืจื•ื™ื•ืช ื‘ื ื™ื™ื” ืฉื•ื ื•ืช ืœ- Schemes ื ืคืจื“ื•ืช. ืื ื• ื™ื•ืฆืจื™ื ืกื›ื™ืžื” ืขื‘ื•ืจ ืžื‘ื—ื ื™ ืžืžืฉืง ื”ืžืฉืชืžืฉ ืฉืœื ื• [XCode -> ืžื•ืฆืจ -> ืกื›ืžื” -> ืกื›ืžื” ื—ื“ืฉื”] ื•ื ื•ืชื ื™ื ืœื” ืืช ืื•ืชื• ื”ืฉื: AmazingAppUITests.

ื”ืžื‘ื ื” ืฉืœ ื”ืกื›ื™ืžื” ืฉื ื•ืฆืจื” ื—ื™ื™ื‘ ืœื›ืœื•ืœ ืืช ื”ื™ืขื“ ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ื”ืจืืฉื™ืช - ื‘ื“ื™ืงื•ืช AmazingApp ื•-Target UI - AmazingAppUITests - ืจืื” ืฆื™ืœื•ื ืžืกืš

ืื ื• ืžื‘ืฆืขื™ื ื‘ื“ื™ืงื•ืช ืื™ื ืกื˜ืจื•ืžื ื˜ืœื™ื•ืช ื‘-Firebase Test Lab. ื—ืœืง 1: ืคืจื•ื™ืงื˜ iOS

ืœืื—ืจ ืžื›ืŸ, ืื ื• ื™ื•ืฆืจื™ื ืชืฆื•ืจืช ื‘ื ื™ื™ื” ื—ื“ืฉื” ืขื‘ื•ืจ ืžื‘ื—ื ื™ ืžืžืฉืง ืžืฉืชืžืฉ. ื‘-XCode, ืœื—ืฅ ืขืœ ืงื•ื‘ืฅ ื”ืคืจื•ื™ืงื˜ ื•ืขื‘ื•ืจ ืœืงื˜ืข ืžื™ื“ืข. ืœื—ืฅ ืขืœ "+" ื•ืฆื•ืจ ืชืฆื•ืจื” ื—ื“ืฉื”, ืœืžืฉืœ XCtest. ื ืฆื˜ืจืš ืืช ื–ื” ื‘ืขืชื™ื“ ื›ื“ื™ ืœื”ื™ืžื ืข ืžืจื™ืงื•ื“ ืขื ื˜ืžื‘ื•ืจื™ืŸ ื‘ื›ืœ ื”ื ื•ื’ืข ืœื—ืชื™ืžื” ื‘ืงื•ื“.

ืื ื• ืžื‘ืฆืขื™ื ื‘ื“ื™ืงื•ืช ืื™ื ืกื˜ืจื•ืžื ื˜ืœื™ื•ืช ื‘-Firebase Test Lab. ื—ืœืง 1: ืคืจื•ื™ืงื˜ iOS

ื™ืฉ ืœืคื—ื•ืช ืฉืœื•ืฉื” ื™ืขื“ื™ื ื‘ืคืจื•ื™ืงื˜ ืฉืœืš: ื”ืืคืœื™ืงืฆื™ื” ื”ืจืืฉื™ืช, ื‘ื“ื™ืงื•ืช ื™ื—ื™ื“ื” (ื‘ื›ืœ ื–ืืช, ื”ืŸ ืงื™ื™ืžื•ืช, ื ื›ื•ืŸ?) ื•ืžื‘ื—ื ื™ ื”-Target UI ืฉื™ืฆืจื ื•.

ืขื‘ื•ืจ ืืœ Target AmazingApp, ื”ื›ืจื˜ื™ืกื™ื™ื” Build Settings, ืกืขื™ืฃ ื–ื”ื•ืช ื—ืชื™ืžืช ืงื•ื“. ืขื‘ื•ืจ ืชืฆื•ืจืช XCtest, ื‘ื—ืจ iOS Developer. ื‘ืงื˜ืข ืกื’ื ื•ืŸ ื—ืชื™ืžืช ืงื•ื“, ื‘ื—ืจ ื™ื“ื ื™. ืขื“ื™ื™ืŸ ืœื ื™ืฆืจื ื• ืคืจื•ืคื™ืœ ืืกืคืงื”, ืื‘ืœ ื‘ื”ื—ืœื˜ ื ื—ื–ื•ืจ ืืœื™ื• ืžืขื˜ ืžืื•ื—ืจ ื™ื•ืชืจ.

ืขื‘ื•ืจ Target AmazingAppUITests ืื ื—ื ื• ืขื•ืฉื™ื ืืช ืื•ืชื• ื”ื“ื‘ืจ, ืื‘ืœ ื‘ืขืžื•ื“ื” Product Bundle Identifier ืื ื—ื ื• ืžื›ื ื™ืกื™ื com.company.amazingappuitests.

2. ื”ืงืžืช ืคืจื•ื™ืงื˜ ื‘ืชื•ื›ื ื™ืช ื”ืžืคืชื—ื™ื ืฉืœ ืืคืœ

ืขื‘ื•ืจ ืืœ ื”ื“ืฃ ืฉืœ Apple Developer Program, ืขื‘ื•ืจ ืืœ ื”ืงื˜ืข ืื™ืฉื•ืจื™ื, ืžื–ื”ื™ื ื•ืคืจื•ืคื™ืœื™ื ื•ืœืื—ืจ ืžื›ืŸ ืืœ ื”ืขืžื•ื“ื” ืžื–ื”ื™ ืืคืœื™ืงืฆื™ื” ืฉืœ ื”ืคืจื™ื˜ ืžื–ื”ื™ื. ืฆื•ืจ ืžื–ื”ื” ืืคืœื™ืงืฆื™ื” ื—ื“ืฉ ื‘ืฉื AmazingAppUITests ื•-bundleID com.company.amazingappuitests.

ืื ื• ืžื‘ืฆืขื™ื ื‘ื“ื™ืงื•ืช ืื™ื ืกื˜ืจื•ืžื ื˜ืœื™ื•ืช ื‘-Firebase Test Lab. ื—ืœืง 1: ืคืจื•ื™ืงื˜ iOS

ื›ืขืช ื™ืฉ ืœื ื• ื”ื–ื“ืžื ื•ืช ืœื—ืชื•ื ืขืœ ื”ื‘ื“ื™ืงื•ืช ืฉืœื ื• ืขื ืชืขื•ื“ื” ื ืคืจื“ืช, ืื‘ืœ... ื”ืœื™ืš ื”ืจื›ื‘ืช build ืœื‘ื“ื™ืงื” ื›ื•ืœืœ ื”ืจื›ื‘ืช ื”ืืคืœื™ืงืฆื™ื” ืขืฆืžื” ื•ื”ืจื›ื‘ืช ื”-test runner. ื‘ื”ืชืื, ืื ื• ืขื•ืžื“ื™ื ื‘ืคื ื™ ื‘ืขื™ื” ืฉืœ ื—ืชื™ืžื” ืขืœ ืฉื ื™ ืžื–ื”ื™ ื—ื‘ื™ืœื” ืขื ืคืจื•ืคื™ืœ ื”ืงืฆืื” ืื—ื“. ืœืžืจื‘ื” ื”ืžื–ืœ, ื™ืฉ ืคืชืจื•ืŸ ืคืฉื•ื˜ ื•ืืœื’ื ื˜ื™ - Wildcard App ID. ืื ื• ื—ื•ื–ืจื™ื ืขืœ ื”ื”ืœื™ืš ืœื™ืฆื™ืจืช ืžื–ื”ื” ืืคืœื™ืงืฆื™ื” ื—ื“ืฉ, ืืš ื‘ืžืงื•ื ืžื–ื”ื” ืืคืœื™ืงืฆื™ื” ืžืคื•ืจืฉ, ื‘ื—ืจ ืžื–ื”ื” ืืคืœื™ืงืฆื™ื” Wildcard ื›ืžื• ื‘ืฆื™ืœื•ื ื”ืžืกืš.

ืื ื• ืžื‘ืฆืขื™ื ื‘ื“ื™ืงื•ืช ืื™ื ืกื˜ืจื•ืžื ื˜ืœื™ื•ืช ื‘-Firebase Test Lab. ื—ืœืง 1: ืคืจื•ื™ืงื˜ iOS

ื‘ืฉืœื‘ ื–ื” ืกื™ื™ืžื ื• ืœืขื‘ื•ื“ ืขื developer.apple.com, ืืš ืœื ื ืฆืžืฆื ืืช ื—ืœื•ืŸ ื”ื“ืคื“ืคืŸ. ื‘ื•ื ื ืœืš ืœ ืืชืจ ืชื™ืขื•ื“ Fastlane ื•ืงืจื ืขืœ ื›ืœื™ ื”ืฉื™ืจื•ืช Match ืžื›ืกื” ืœื›ืจื™ื›ื”.

ืงื•ืจื ืงืฉื•ื‘ ืฉื ืœื‘ ืฉื›ื“ื™ ืœื”ืฉืชืžืฉ ื‘ื›ืœื™ ื”ืฉื™ืจื•ืช ื”ื–ื” ื ื–ื“ืงืง ืœืžืื’ืจ ืคืจื˜ื™ ื•ืœื—ืฉื‘ื•ืŸ ืขื ื’ื™ืฉื” ื’ื ืœืชื•ื›ื ื™ืช ื”ืžืคืชื—ื™ื ืฉืœ ืืคืœ ื•ื’ื ืœ-Github. ืื ื—ื ื• ื™ื•ืฆืจื™ื (ืื ืคืชืื•ื ืื™ืŸ ื“ื‘ืจ ื›ื–ื”) ื—ืฉื‘ื•ืŸ ืฉืœ ื”ื˜ื•ืคืก [ืžื•ื’ืŸ ื‘ื“ื•ื"ืœ], ื”ืขืœื” ืกื™ืกืžื” ื—ื–ืงื”, ืจืฉื•ื ืื•ืชื” ื‘-developer.apple.com, ื•ืžื™ื ื• ืื•ืชื” ื›ืžื ื”ืœ ืคืจื•ื™ืงื˜. ืœืื—ืจ ืžื›ืŸ, ืื ื• ื ื•ืชื ื™ื ืœื—ืฉื‘ื•ืŸ ื’ื™ืฉื” ืœืžืื’ืจ github ืฉืœ ื”ื—ื‘ืจื” ืฉืœืš ื•ื™ื•ืฆืจื™ื ืžืื’ืจ ืคืจื˜ื™ ื—ื“ืฉ ืขื ืฉื ื›ืžื• AmazingAppMatch.

3. ื”ื’ื“ืจืช Fastlane ื•ืฉื™ืจื•ืช ื”ื”ืชืืžื”

ืคืชื— ืžืกื•ืฃ, ืขื‘ื•ืจ ืœืชื™ืงื™ื” ืขื ื”ืคืจื•ื™ืงื˜ ื•ืืชื—ืœ ืืช fastlane ื›ืคื™ ืฉืžืฆื•ื™ืŸ ื‘ ืžื“ืจื™ืš ืจืฉืžื™. ืœืื—ืจ ื”ื–ื ืช ื”ืคืงื•ื“ื”

$ fastlane init

ืชืชื‘ืงืฉ ืœื‘ื—ื•ืจ ืชืฆื•ืจื•ืช ืฉื™ืžื•ืฉ ื–ืžื™ื ื•ืช. ื‘ื—ืจ ื‘ืืคืฉืจื•ืช ื”ืจื‘ื™ืขื™ืช - ื”ื’ื“ืจืช ืคืจื•ื™ืงื˜ ื™ื“ื ื™ืช.

ืื ื• ืžื‘ืฆืขื™ื ื‘ื“ื™ืงื•ืช ืื™ื ืกื˜ืจื•ืžื ื˜ืœื™ื•ืช ื‘-Firebase Test Lab. ื—ืœืง 1: ืคืจื•ื™ืงื˜ iOS

ืœืคืจื•ื™ืงื˜ ื™ืฉ ืกืคืจื™ื™ื” ื—ื“ืฉื” ืฉืœ fastlane, ื”ืžื›ื™ืœื” ืฉื ื™ ืงื‘ืฆื™ื - Appfile ื•-Fastfile. ื‘ืงืฆืจื”, ืื ื• ืžืื—ืกื ื™ื ื ืชื•ื ื™ ืฉื™ืจื•ืช ื‘-Appfile, ื•ื›ื•ืชื‘ื™ื ืขื‘ื•ื“ื•ืช ื‘-Fastfile, ื”ื ืงืจืื™ื ืžืกืœื•ืœื™ื ื‘ื˜ืจืžื™ื ื•ืœื•ื’ื™ื” ืฉืœ 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

ืื ื• ื—ื•ื–ืจื™ื ืœื˜ืจืžื™ื ืœ ื•ืœืคื™ ื”ืžื“ืจื™ืš ื”ืจืฉืžื™ ืžืชื—ื™ืœื™ื ืœื”ื’ื“ื™ืจ ื”ืชืืžื”.

$ fastlane match init
$ fastlane match development

ืœืื—ืจ ืžื›ืŸ, ื”ื–ื™ื ื• ืืช ื”ื ืชื•ื ื™ื ื”ืžื‘ื•ืงืฉื™ื - ืžืื’ืจ, ื—ืฉื‘ื•ืŸ, ืกื™ืกืžื” ื•ื›ื•'.

ื—ืฉื•ื‘: ื›ืืฉืจ ืืชื” ืžืคืขื™ืœ ืœืจืืฉื•ื ื” ืืช ื›ืœื™ ื”ื”ืชืืžื”, ืชืชื‘ืงืฉ ืœื”ื–ื™ืŸ ืกื™ืกืžื” ื›ื“ื™ ืœืคืขื ื— ืืช ื”ืžืื’ืจ. ื—ืฉื•ื‘ ืžืื•ื“ ืœืฉืžื•ืจ ืืช ื”ืกื™ืกืžื” ื”ื–ื•; ื ืฆื˜ืจืš ืื•ืชื” ื‘ืขืช ื”ื’ื“ืจืช ืฉืจืช ื”-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

ืื ื• ืžืžืœืื™ื ืื•ืชื• ื‘ื“ื™ื•ืง ื›ืš ืื ื ืจืฆื” ืœื”ืฉืชืžืฉ ื‘-match ื‘ืขืชื™ื“ ื›ื“ื™ ืœื—ืชื•ื ืขืœ builds ืœืชืฆื•ื’ื” ื‘-Crashlytics ื•/ืื• ื‘-AppStore, ื›ืœื•ืžืจ ืœื—ืชื•ื ืขืœ ืžื–ื”ื” ื”ื—ื‘ื™ืœื” ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ืฉืœืš.

ืื‘ืœ, ื›ื–ื›ื•ืจ, ื™ืฆืจื ื• ืžื–ื”ื” Wildcard ืžื™ื•ื—ื“ ื›ื“ื™ ืœื—ืชื•ื ืขืœ ื‘ื ื™ื™ืช ื”ื‘ื“ื™ืงื”. ืœื›ืŸ, ืคืชื— ืืช Fastfile ื•ื”ื™ื›ื ืก ืœื ืชื™ื‘ ื—ื“ืฉ:

lane :testing_build_for_firebase do

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

end

ืฉืžื•ืจ ื•ื”ื™ื›ื ืก ืœืžืกื•ืฃ

fastlane testing_build_for_firebase

ื•ืื ื—ื ื• ืจื•ืื™ื ืื™ืš fastlane ื™ืฆืจื” ืชืขื•ื“ื” ื—ื“ืฉื” ื•ื”ื›ื ื™ืกื” ืื•ืชื” ืœืžืื’ืจ. ื’ื“ื•ืœ!

ืคืชื— ืืช XCode. ื›ืขืช ื™ืฉ ืœื ื• ืืช ืคืจื•ืคื™ืœ ื”ื”ืงืฆืื” ื”ื“ืจื•ืฉ ืฉืœ ื”ื˜ื•ืคืก Match Development com.company.*, ืื•ืชื• ื™ืฉ ืœืฆื™ื™ืŸ ื‘ืกืขื™ืฃ ืคืจื•ืคื™ืœ ื”ื”ืงืฆืื” ืขื‘ื•ืจ ื”ื™ืขื“ื™ื AmazingApp ื•-AmazingAppUITests.

ืื ื• ืžื‘ืฆืขื™ื ื‘ื“ื™ืงื•ืช ืื™ื ืกื˜ืจื•ืžื ื˜ืœื™ื•ืช ื‘-Firebase Test Lab. ื—ืœืง 1: ืคืจื•ื™ืงื˜ iOS

ื ื•ืชืจ ืœื”ื•ืกื™ืฃ ื ืชื™ื‘ ืœื‘ื“ื™ืงื•ืช ื”ืจื›ื‘ื”. ื‘ื•ื ื ืœืš ืœ ืžืื’ืจ ืคืจื•ื™ืงื˜ ืคืœืื’ื™ืŸ ืขื‘ื•ืจ fastlane ืฉืžืงืœ ืขืœ ื”ื’ื“ืจืช ื”ื™ื™ืฆื•ื ืœืžืขื‘ื“ืช ื”ื‘ื“ื™ืงื•ืช ืฉืœ Firebase ื•ืคืขืœ ืœืคื™ ื”ื”ื•ืจืื•ืช.

ื‘ื•ืื• ื ืขืฉื” ื”ืขืชืง-ื”ื“ื‘ืง ืžื”ื“ื•ื’ืžื” ื”ืžืงื•ืจื™ืช ื›ืš ืฉื”-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. ืฆื•ืจ ืคืจื•ื™ืงื˜ ื—ื“ืฉ ื‘ืฉื AmazingAppUITests.

ื—ืฉื•ื‘: ื‘ืฉืœื‘ ื”ืงื•ื“ื ื‘-Fastfile ื‘-lane firebase_test_lab_ios_xctest ื”ืคืจืžื˜ืจ gcp_project ืฆืจื™ืš ืœื”ืชืื™ื ืœืฉื ื”ืคืจื•ื™ืงื˜.

ืื ื• ืžื‘ืฆืขื™ื ื‘ื“ื™ืงื•ืช ืื™ื ืกื˜ืจื•ืžื ื˜ืœื™ื•ืช ื‘-Firebase Test Lab. ื—ืœืง 1: ืคืจื•ื™ืงื˜ iOS

ื”ื’ื“ืจื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืžืชืื™ืžื•ืช ืœื ื• ื“ื™ ื˜ื•ื‘.

ืืœ ืชืกื’ื•ืจ ืืช ื”ื›ืจื˜ื™ืกื™ื™ื”, ื”ื™ืจืฉื ืชื—ืช ืื•ืชื• ื—ืฉื‘ื•ืŸ ื‘ Gcloud - ื–ื”ื• ืžื“ื“ ื”ื›ืจื—ื™, ืžื›ื™ื•ื•ืŸ ืฉื”ืชืงืฉื•ืจืช ืขื Firebase ืžืชืจื—ืฉืช ื‘ืืžืฆืขื•ืช ืžืžืฉืง ืžืกื•ืฃ gcloud.

ื’ื•ื’ืœ ื ื•ืชื ืช 300 ื“ื•ืœืจ ืœืฉื ื”, ืฉื‘ื”ืงืฉืจ ืฉืœ ื‘ื™ืฆื•ืข ื‘ื“ื™ืงื•ืช ืื•ื˜ื•ืžื˜ื™ื•ืช ืฉื•ื•ื” ืขืจืš ืœืฉื ื” ืฉืœ ืฉื™ืžื•ืฉ ื—ื•ืคืฉื™ ื‘ืฉื™ืจื•ืช. ืื ื• ืžื›ื ื™ืกื™ื ืืช ืคืจื˜ื™ ื”ืชืฉืœื•ื ืฉืœืš, ืžืžืชื™ื ื™ื ืœื—ื™ื•ื‘ ื”ื‘ื“ื™ืงื” ื‘ืกืš $1 ื•ืžืงื‘ืœื™ื $300 ืœื—ืฉื‘ื•ื ืš. ืœืื—ืจ ืฉื ื”, ื”ืคืจื•ื™ืงื˜ ื™ื•ืขื‘ืจ ืื•ื˜ื•ืžื˜ื™ืช ืœืชื›ื ื™ืช ืชืขืจื™ืคื™ื ื—ื™ื ืžื™ืช, ื›ืš ืฉืื™ืŸ ืฆื•ืจืš ืœื—ืฉื•ืฉ ืžืื•ื‘ื“ืŸ ื›ืกืฃ ืืคืฉืจื™.

ื ื—ื–ื•ืจ ืœืœืฉื•ื ื™ืช ืขื ืคืจื•ื™ืงื˜ Firebase ื•ื ืขื‘ื™ืจ ืื•ืชื• ืœืชื•ื›ื ื™ืช ื”ืชืขืจื™ืคื™ื ืฉืœ Blaze - ืขื›ืฉื™ื• ื™ืฉ ืœื ื• ืžื” ืœืฉืœื ืื ื™ื—ืจื•ื’ ืžื”ืžื’ื‘ืœื”.

ื‘ืžืžืฉืง gcloud, ื‘ื—ืจ ื‘ืคืจื•ื™ืงื˜ Firebase ืฉืœื ื•, ื‘ื—ืจ ื‘ืคืจื™ื˜ ื”ืชืคืจื™ื˜ ื”ืจืืฉื™ "Directory" ื•ื”ื•ืกืฃ ืืช Cloud Testing API ื•ืืช Cloud Tools Result API.

ืื ื• ืžื‘ืฆืขื™ื ื‘ื“ื™ืงื•ืช ืื™ื ืกื˜ืจื•ืžื ื˜ืœื™ื•ืช ื‘-Firebase Test Lab. ื—ืœืง 1: ืคืจื•ื™ืงื˜ iOS

ืœืื—ืจ ืžื›ืŸ ืขื‘ื•ืจ ืœืคืจื™ื˜ ื”ืชืคืจื™ื˜ "IAM ื•ื ื™ื”ื•ืœ" -> ื—ืฉื‘ื•ื ื•ืช ืฉื™ืจื•ืช -> ืฆื•ืจ ื—ืฉื‘ื•ืŸ ืฉื™ืจื•ืช. ืื ื• ืžืขื ื™ืงื™ื ื–ื›ื•ื™ื•ืช ืœืขืจื™ื›ืช ื”ืคืจื•ื™ืงื˜.

ืื ื• ืžื‘ืฆืขื™ื ื‘ื“ื™ืงื•ืช ืื™ื ืกื˜ืจื•ืžื ื˜ืœื™ื•ืช ื‘-Firebase Test Lab. ื—ืœืง 1: ืคืจื•ื™ืงื˜ iOS

ืฆื•ืจ ืžืคืชื— API ื‘ืคื•ืจืžื˜ JSON

ืื ื• ืžื‘ืฆืขื™ื ื‘ื“ื™ืงื•ืช ืื™ื ืกื˜ืจื•ืžื ื˜ืœื™ื•ืช ื‘-Firebase Test Lab. ื—ืœืง 1: ืคืจื•ื™ืงื˜ iOS

ื ื–ื“ืงืง ืœ-JSON ืฉื”ื•ืจื“ ืžืขื˜ ืžืื•ื—ืจ ื™ื•ืชืจ, ืืš ืœืขืช ืขืชื” ื ืฉืงื•ืœ ืืช ื”ื”ื’ื“ืจื” ืฉืœ ืžืขื‘ื“ืช ื”ื‘ื“ื™ืงื•ืช ื›ืฉืœืžื”.

5. ื”ื’ื“ืจืช CircleCI

ื ืฉืืœืช ืฉืืœื” ืกื‘ื™ืจื” - ืžื” ืขื•ืฉื™ื ืขื ืกื™ืกืžืื•ืช? ืžื ื’ื ื•ืŸ ืžืฉืชื ื” ื”ืกื‘ื™ื‘ื” ืฉืœ ืžื›ื•ื ืช ื”ื‘ื ื™ื™ื” ืฉืœื ื• ื™ืขื–ื•ืจ ืœื ื• ืœืื—ืกืŸ ื‘ืฆื•ืจื” ืžืื•ื‘ื˜ื—ืช ืืช ื”ืกื™ืกืžืื•ืช ืฉืœื ื• ื•ื ืชื•ื ื™ื ืจื’ื™ืฉื™ื ืื—ืจื™ื. ื‘ื”ื’ื“ืจื•ืช ื”ืคืจื•ื™ืงื˜ CircleCI, ื‘ื—ืจ ืžืฉืชื ื™ ืกื‘ื™ื‘ื”

ืื ื• ืžื‘ืฆืขื™ื ื‘ื“ื™ืงื•ืช ืื™ื ืกื˜ืจื•ืžื ื˜ืœื™ื•ืช ื‘-Firebase Test Lab. ื—ืœืง 1: ืคืจื•ื™ืงื˜ iOS
ื•ื”ื’ื“ืจ ืืช ื”ืžืฉืชื ื™ื ื”ื‘ืื™ื:

  • ืžืคืชื—: GOOGLE_APPLICATION_CREDENTIALS
    ืขืจืš: ื”ืชื•ื›ืŸ ืฉืœ ืงื•ื‘ืฅ ื”-json ืฉืœ ืžืคืชื— ื”ื—ืฉื‘ื•ืŸ ืฉืœ ืฉื™ืจื•ืช gcloud
  • ืžืคืชื—: MATCH_PASSWORD
    value: ืกื™ืกืžื” ืœืคืขื ื•ื— ืžืื’ืจ github ืขื ืื™ืฉื•ืจื™ื
  • ืžืคืชื—: FASTLANE_PASSWORD
    ืขืจืš: ืกื™ืกืžืช ื—ืฉื‘ื•ืŸ ืชืฉืชื™ืช ืฉืœ ืคื•ืจื˜ืœ ื”ืžืคืชื—ื™ื ืฉืœ Apple

ืื ื• ืฉื•ืžืจื™ื ืืช ื”ืฉื™ื ื•ื™ื™ื, ื™ื•ืฆืจื™ื ื™ื—"ืฆ ื•ืฉื•ืœื—ื™ื ืื•ืชื• ืœื”ื•ื‘ืœืช ื”ืฆื•ื•ืช ืฉืœื ื• ืœื‘ื“ื™ืงื”.

ืชื•ืฆืื•ืช ืฉืœ

ื›ืชื•ืฆืื” ืžื”ืžื ื™ืคื•ืœืฆื™ื•ืช ื”ืคืฉื•ื˜ื•ืช ื”ืœืœื•, ืงื™ื‘ืœื ื• ืขืžื“ืช ืขื‘ื•ื“ื” ื˜ื•ื‘ื” ื•ื™ืฆื™ื‘ื” ืขื ื™ื›ื•ืœืช ื”ืงืœื˜ืช ื•ื™ื“ืื• ืขืœ ืžืกืš ื”ืžื›ืฉื™ืจ ื‘ื–ืžืŸ ื”ื‘ื“ื™ืงื”. ื‘ื“ื•ื’ืžื” ืœื‘ื“ื™ืงื”, ืฆื™ื™ื ืชื™ ืืช ื“ื’ื ืžื›ืฉื™ืจ ื”ืื™ื™ืคื•ืŸ X, ืืš ื”ื—ื•ื•ื” ืžืกืคืงืช ืžื‘ื—ืจ ืขืฉื™ืจ ืžืฉื™ืœื•ื‘ ืฉืœ ื“ื’ืžื™ื ืฉื•ื ื™ื ื•ื’ืจืกืื•ืช iOS.

ื”ื—ืœืง ื”ืฉื ื™ ื™ื•ืงื“ืฉ ืœื”ื’ื“ืจื” ืฉืœื‘ ืื—ืจ ืฉืœื‘ ืฉืœ Firebase Test Lab ืขื‘ื•ืจ ืคืจื•ื™ืงื˜ ืื ื“ืจื•ืื™ื“.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”