ืฉืื ืืืืืจื, ืื ื ืขืืื ืืืกืืจ ืืืืจื
ืืคื ื ืื, ืืืจ ื ืืกืืชื ืืช 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.
ืขืืืจ ืืงืืข Build Phases ืฉื ืืืขื ืฉื ืืฆืจ ืืืืืง ืืช ื ืืืืืชื ืฉื Target Dependencies - AmazingApp, ื-Compile Sources - AmazingAppUITests.swift.
ืชืจืืื ืืื ืืื ืืืคืจืื ืืคืฉืจืืืืช ืื ืืื ืฉืื ืืช ื- Schemes ื ืคืจืืืช. ืื ื ืืืฆืจืื ืกืืืื ืขืืืจ ืืืื ื ืืืฉืง ืืืฉืชืืฉ ืฉืื ื [XCode -> ืืืฆืจ -> ืกืืื -> ืกืืื ืืืฉื] ืื ืืชื ืื ืื ืืช ืืืชื ืืฉื: AmazingAppUITests.
ืืืื ื ืฉื ืืกืืืื ืฉื ืืฆืจื ืืืื ืืืืื ืืช ืืืขื ืฉื ืืืคืืืงืฆืื ืืจืืฉืืช - ืืืืงืืช AmazingApp ื-Target UI - AmazingAppUITests - ืจืื ืฆืืืื ืืกื
ืืืืจ ืืื, ืื ื ืืืฆืจืื ืชืฆืืจืช ืื ืืื ืืืฉื ืขืืืจ ืืืื ื ืืืฉืง ืืฉืชืืฉ. ื-XCode, ืืืฅ ืขื ืงืืืฅ ืืคืจืืืงื ืืขืืืจ ืืงืืข ืืืืข. ืืืฅ ืขื "+" ืืฆืืจ ืชืฆืืจื ืืืฉื, ืืืฉื XCtest. ื ืฆืืจื ืืช ืื ืืขืชืื ืืื ืืืืื ืข ืืจืืงืื ืขื ืืืืืจืื ืืื ืื ืืืข ืืืชืืื ืืงืื.
ืืฉ ืืคืืืช ืฉืืืฉื ืืขืืื ืืคืจืืืงื ืฉืื: ืืืคืืืงืฆืื ืืจืืฉืืช, ืืืืงืืช ืืืืื (ืืื ืืืช, ืื ืงืืืืืช, ื ืืื?) ืืืืื ื ื-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.
ืืขืช ืืฉ ืื ื ืืืืื ืืช ืืืชืื ืขื ืืืืืงืืช ืฉืื ื ืขื ืชืขืืื ื ืคืจืืช, ืืื... ืืืื ืืจืืืช build ืืืืืงื ืืืื ืืจืืืช ืืืคืืืงืฆืื ืขืฆืื ืืืจืืืช ื-test runner. ืืืชืื, ืื ื ืขืืืืื ืืคื ื ืืขืื ืฉื ืืชืืื ืขื ืฉื ื ืืืื ืืืืื ืขื ืคืจืืคืื ืืงืฆืื ืืื. ืืืจืื ืืืื, ืืฉ ืคืชืจืื ืคืฉืื ืืืืื ืื - Wildcard App ID. ืื ื ืืืืจืื ืขื ืืืืื ืืืฆืืจืช ืืืื ืืคืืืงืฆืื ืืืฉ, ืื ืืืงืื ืืืื ืืคืืืงืฆืื ืืคืืจืฉ, ืืืจ ืืืื ืืคืืืงืฆืื Wildcard ืืื ืืฆืืืื ืืืกื.
ืืฉืื ืื ืกืืืื ื ืืขืืื ืขื developer.apple.com, ืื ืื ื ืฆืืฆื ืืช ืืืื ืืืคืืคื. ืืื ื ืื ื
ืงืืจื ืงืฉืื ืฉื ืื ืฉืืื ืืืฉืชืืฉ ืืืื ืืฉืืจืืช ืืื ื ืืืงืง ืืืืืจ ืคืจืื ืืืืฉืืื ืขื ืืืฉื ืื ืืชืืื ืืช ืืืคืชืืื ืฉื ืืคื ืืื ื-Github. ืื ืื ื ืืืฆืจืื (ืื ืคืชืืื ืืื ืืืจ ืืื) ืืฉืืื ืฉื ืืืืคืก [ืืืื ืืืื"ื], ืืขืื ืกืืกืื ืืืงื, ืจืฉืื ืืืชื ื-developer.apple.com, ืืืื ื ืืืชื ืืื ืื ืคืจืืืงื. ืืืืจ ืืื, ืื ื ื ืืชื ืื ืืืฉืืื ืืืฉื ืืืืืจ github ืฉื ืืืืจื ืฉืื ืืืืฆืจืื ืืืืจ ืคืจืื ืืืฉ ืขื ืฉื ืืื AmazingAppMatch.
3. ืืืืจืช Fastlane ืืฉืืจืืช ืืืชืืื
ืคืชื ืืกืืฃ, ืขืืืจ ืืชืืงืื ืขื ืืคืจืืืงื ืืืชืื ืืช fastlane ืืคื ืฉืืฆืืื ื
$ fastlane init
ืชืชืืงืฉ ืืืืืจ ืชืฆืืจืืช ืฉืืืืฉ ืืืื ืืช. ืืืจ ืืืคืฉืจืืช ืืจืืืขืืช - ืืืืจืช ืคืจืืืงื ืืื ืืช.
ืืคืจืืืงื ืืฉ ืกืคืจืืื ืืืฉื ืฉื 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.
ื ืืชืจ ืืืืกืืฃ ื ืชืื ืืืืืงืืช ืืจืืื. ืืื ื ืื ื
ืืืื ื ืขืฉื ืืขืชืง-ืืืืง ืืืืืืื ืืืงืืจืืช ืื ืฉื-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 ืืชืืื ืืช ืืื ืืืช, ืื ืืืื ืืืื ืื. ืืื ืืืื ืืืืชื ืืืืืืื, ืื ืืฆืืจื ืืืืงื ืื ื ืืืืืื ืืืฆืืจ ืคืจืืืงื ื ืคืจื ืขื ืฉื ื ืฉื ืฉืืืืฉ ืืืคืฉื (ืืื ืื, ื ืืื?)
ืื ืื ื ื ืื ืกืื ืืืฉืืื ืืชืฉืชืืช ืฉืื ื (ืื ืื ืืืจ, ืื ืื ืืฉื ื), ืื ืื ืกืื ื
ืืฉืื: ืืฉืื ืืงืืื ื-Fastfile ื-lane firebase_test_lab_ios_xctest ืืคืจืืืจ gcp_project ืฆืจืื ืืืชืืื ืืฉื ืืคืจืืืงื.
ืืืืจืืช ืืจืืจืช ืืืืื ืืชืืืืืช ืื ื ืื ืืื.
ืื ืชืกืืืจ ืืช ืืืจืืืกืืื, ืืืจืฉื ืชืืช ืืืชื ืืฉืืื ื
ืืืื ื ืืชื ืช 300 ืืืืจ ืืฉื ื, ืฉืืืงืฉืจ ืฉื ืืืฆืืข ืืืืงืืช ืืืืืืืืืช ืฉืืื ืขืจื ืืฉื ื ืฉื ืฉืืืืฉ ืืืคืฉื ืืฉืืจืืช. ืื ื ืืื ืืกืื ืืช ืคืจืื ืืชืฉืืื ืฉืื, ืืืชืื ืื ืืืืื ืืืืืงื ืืกื $1 ืืืงืืืื $300 ืืืฉืืื ื. ืืืืจ ืฉื ื, ืืคืจืืืงื ืืืขืืจ ืืืืืืืืช ืืชืื ืืช ืชืขืจืืคืื ืืื ืืืช, ืื ืฉืืื ืฆืืจื ืืืฉืืฉ ืืืืืื ืืกืฃ ืืคืฉืจื.
ื ืืืืจ ืืืฉืื ืืช ืขื ืคืจืืืงื Firebase ืื ืขืืืจ ืืืชื ืืชืืื ืืช ืืชืขืจืืคืื ืฉื Blaze - ืขืืฉืื ืืฉ ืื ื ืื ืืฉืื ืื ืืืจืื ืืืืืืื.
ืืืืฉืง gcloud, ืืืจ ืืคืจืืืงื Firebase ืฉืื ื, ืืืจ ืืคืจืื ืืชืคืจืื ืืจืืฉื "Directory" ืืืืกืฃ ืืช Cloud Testing API ืืืช Cloud Tools Result API.
ืืืืจ ืืื ืขืืืจ ืืคืจืื ืืชืคืจืื "IAM ืื ืืืื" -> ืืฉืืื ืืช ืฉืืจืืช -> ืฆืืจ ืืฉืืื ืฉืืจืืช. ืื ื ืืขื ืืงืื ืืืืืืช ืืขืจืืืช ืืคืจืืืงื.
ืฆืืจ ืืคืชื API ืืคืืจืื JSON
ื ืืืงืง ื-JSON ืฉืืืจื ืืขื ืืืืืจ ืืืชืจ, ืื ืืขืช ืขืชื ื ืฉืงืื ืืช ืืืืืจื ืฉื ืืขืืืช ืืืืืงืืช ืืฉืืื.
5. ืืืืจืช CircleCI
ื ืฉืืืช ืฉืืื ืกืืืจื - ืื ืขืืฉืื ืขื ืกืืกืืืืช? ืื ืื ืื ืืฉืชื ื ืืกืืืื ืฉื ืืืื ืช ืืื ืืื ืฉืื ื ืืขืืืจ ืื ื ืืืืกื ืืฆืืจื ืืืืืืืช ืืช ืืกืืกืืืืช ืฉืื ื ืื ืชืื ืื ืจืืืฉืื ืืืจืื. ืืืืืจืืช ืืคืจืืืงื CircleCI, ืืืจ ืืฉืชื ื ืกืืืื
ืืืืืจ ืืช ืืืฉืชื ืื ืืืืื:
- ืืคืชื: GOOGLE_APPLICATION_CREDENTIALS
ืขืจื: ืืชืืื ืฉื ืงืืืฅ ื-json ืฉื ืืคืชื ืืืฉืืื ืฉื ืฉืืจืืช gcloud - ืืคืชื: MATCH_PASSWORD
value: ืกืืกืื ืืคืขื ืื ืืืืจ github ืขื ืืืฉืืจืื - ืืคืชื: FASTLANE_PASSWORD
ืขืจื: ืกืืกืืช ืืฉืืื ืชืฉืชืืช ืฉื ืคืืจืื ืืืคืชืืื ืฉื Apple
ืื ื ืฉืืืจืื ืืช ืืฉืื ืืืื, ืืืฆืจืื ืื"ืฆ ืืฉืืืืื ืืืชื ืืืืืืช ืืฆืืืช ืฉืื ื ืืืืืงื.
ืชืืฆืืืช ืฉื
ืืชืืฆืื ืืืื ืืคืืืฆืืืช ืืคืฉืืืืช ืืืื, ืงืืืื ื ืขืืืช ืขืืืื ืืืื ืืืฆืืื ืขื ืืืืืช ืืงืืืช ืืืืื ืขื ืืกื ืืืืฉืืจ ืืืื ืืืืืงื. ืืืืืื ืืืืืงื, ืฆืืื ืชื ืืช ืืื ืืืฉืืจ ืืืืืคืื X, ืื ืืืืื ืืกืคืงืช ืืืืจ ืขืฉืืจ ืืฉืืืื ืฉื ืืืืื ืฉืื ืื ืืืจืกืืืช iOS.
ืืืืง ืืฉื ื ืืืงืืฉ ืืืืืจื ืฉืื ืืืจ ืฉืื ืฉื Firebase Test Lab ืขืืืจ ืคืจืืืงื ืื ืืจืืืื.
ืืงืืจ: www.habr.com