á˛ááľáŞ áĽáŁááá, á áŠáŁááŤá ááľáĽ áĽáá° ááŤáŞ áĽá°áŤáá
á¨áá á ááľ áĽá á áľááľá á¨Firebase Test Lab á Android ááᏠáá á áĽá áááá ááá á áĽáááľ ááľááááᣠáľááá á¨ááŽáááąá á¨iOS á¨áá¨áŤ áá á¨á° áááľ á á°ááłáłá áá á¨áľ áá áááľá¨á áááá¨á áá°ááŠá˘ áĽá ááá ááľá¨á áá á¨áĽá áĽá ááá ááá áááááŞáŤ áá á áá°áŤá ᣠáľáááá á ááá áĽá¨áłáá áááľ á¨áááŞáŤ á˝áá áááá áá°áአá˘
áľááá
ᣠá iOS ááŽáááľ áá á¨UI áá¨áŤáá˝ áŤáá
ᣠá áááŤá áŽáááŹá˝á á á°áááľ áᏠá áĽááá°á ááłáŞáŤáá˝ áá áááľáŹáľ ááľáá
ááá¨á áľá˝ááá
ᢠááááľ ááá¸áᣠáá° áľááľ áĽááłá á á°á
á ááĄá˘
á áłáŞáŠ ááľáĽ, á á ááłááľ á¨ááááŞáŤ áá¨ááá˝ áá - á GitHub áĽá á CircleCI á¨áááŁáł áľáááľ áá á¨áá áá¨ááť ááááŁáľ áá°ááŠ. á¨áá°áá áŞáŤá áľá AmazingApp ááᣠbundleID com.company.amazingapp ááᢠá ááŁá á፠áááŁáľá áááááľ áá
á áá¨á áá˛áŤáá á áááŁááá˘
á ááŽáááľá ááľáĽ á¨á°áá°á áááľááá˝á á á°áᨠááááľ á°ááŁáŤá áŤá°á¨á, á á áľá°áŤá¨áśá˝ ááľáĽ á¨áĽááľáá áááľ áŤáŤáá.
1. áá°áááš áĽáŤáłá¸á
áUI áá¨áŤáá˝ á á˛áľ á¨ááŽáááľ á áááŤá ááá áŠáĄ
$ git checkout develop
$ git pull
$ git checkout -b âfeature/add-ui-testsâ
ááŽáááąá á XCode ááľáĽ áĽáááá°á áĽá á á˛áľ á˘áá á UI áá¨áŤáá˝ [XCode -> File -> New -> Target -> iOS Testing Bundle] áĽááá áᣠáá á áĽáŤáąá á¨ááŤáĽáŤáŤ AmazingAppUITests ááá˘
áá° á°áá ᨠá˘áá á¨áááŁáł á°á¨ááá˝ ááá áááą áĽá á¨ááá áĽáááá˝ - AmazingAppᣠá áá ááá áááŽá˝ ááľáĽ - AmazingAppUITests.swift áááŠá áŤá¨áááĄá˘
áĽáŠ ááááľ á¨á°ááŤáŠ á¨áááŁáł á ááŤáŽá˝á áá° á°áᨠáááááĽáŽá˝ ááá¨áľ áá. ááŠá á áá°áááťá˝á [XCode -> áááľ -> áĽá áľ -> á á˛áľ áĽá áľ] áĽá áľ ááĽá¨á á°ááłáłá áľá áĽáá°á áááᥠAmazingAppUITestsá˘
á¨á°áá á¨á áĽá áľ ááááŁáľ á¨áááá áá°áá áŞáŤ á˘áá ááŤá°áľ á áá áľ - AmazingApp áĽá Target UI áá¨áŤáá˝ - AmazingAppUITests - á á˝á áłá áá˝ áĽááłá áááá¨áą
á ááá á áUI áá¨áŤáá˝ á á˛áľ á¨áááŁáł áá
á áĽáááĽáŤááᢠá XCode ááľáĽ á¨ááŽáááľ áááá á á
áŤáľáá áĽá áá° áá¨á ááá áááą. â+â áá á á
áŤáľáá áĽá á á˛áľ áá
á ááá አáááłá XCtestᢠá áŽáľ ááá áá á á¨á Ꭰáá¨ááá áááľáá¨áľ áá°ááľ áá
áŤáľáááááá˘
á ááŽáááľá ááľáĽ á˘áŤááľ áŚáľáľ á˘áááá˝ á áᥠááá áá°áá áŞáŤáŁ á¨ááá áá¨áŤáá˝ (á¨ááá á ááᣠáĽááą á áᣠáľááá?) áĽá áĽá á¨áá ááá¸á á¨ááá UI áá¨áŤáá˝á˘
áá° Target AmazingAppᣠBuild Settings áľáᣠá¨áŽáľ ááá ááááľ ááá áááąá˘ áXCtest áá áᣠá¨iOS ááá˘á ááá¨áĄá˘ á áŽáľ ááá áľáłáá ááá ááľáĽ ááááá ááá¨áĄá˘ áĽáľáŤáá ááŽááá á ááá áááᣠáá á áĽááá áááľ áľáá˝ ááá°á áĽááááľá áłááá˘
áááá AmazingAppUITests á°ááłáłá ááá áĽáá°ááááᣠáá á áááľ á áá ἠáá፠á ááľ ááľáĽ com.company.amazingappuitests á áĽááľááŁááá˘
2. á á áá ááᢠááŽááŤá ááľáĽ ááŽáááľ áááááľ
áá° á áá ááᢠááŽááŤá áá˝ áááąáŁ áá° á°áá°ááŹáśá˝áŁ áááŤáá˝ áĽá ááááŤáá˝ ááá áĽá á¨á፠áá° áááŤáá˝ ááĽá á¨áá°áá áŞáŤ ááłáááŤáá˝ á ááľ áááąá˘ AmazingAppUITests áĽá bundleID com.company.amazingappuitests á¨ááŁá á á˛áľ á¨áá°áá áŞáŤ ááłáá፠ááá áŠá˘
á áá áá°áááťá˝áá á á°áᨠá¨ááľáá áá¨ááľ áááá¨á áĽáľáá á ááá°áá, ááá áá ... ááá¨áŤ áááŁáł á¨áááŁá á áá°áľ á áááŹá˝áá áĽáŤáą áááááľ áĽá á¨áá°á áŻá áá°áĽá°áĽá áŤáŤáľáłá. á áá
á áá°á¨áľ áááľ á¨áĽá
á ááłáááŤáá˝á á á ááľ ááŽááá á¨ááá¨á á˝áá ááĽáááᢠáĽáá° áĽáľá áá, ááá áĽá á¨ááŤáá áááľá á á - Wildcard áá°áá áŞáŤ ááłáááŤ. á á˛áľ á¨áá°áá áŞáŤ ááłáá፠áááá á áá°áąá á°ááá áĽáá°áŤáá, ááá áá ááá˝ á áá á¨áá°áá áŞáŤ ááłáá፠áááł, á á
á˝á áłá áá˝ áĽááł ááľáĽ áĽáá° Wildcard áá°áá áŞáŤ ááłáááŤá ááá¨áĄ.
á áá
áá ᨠdeveloper.apple.com áá ááľáŤáľ á¨áá°áá ááááá á¨á áłá˝ ááľáŽáąá á ááłááľáᢠáĽáááľ áá°
á áľáŠá¨áľ á¨áá¨áłá°á á ááŁá˘ áá á áááá፠ááá áá á¨áá áá¨ááť áĽá á¨áááąá á¨á áá ááᢠááŽááŤá áĽá Github ááłá¨áť áŤáá áá፠áĽáá°ááŤáľáááá á áľá°áááᢠáĽá (á áľáááľ áĽáá°áá áŤá ááá á¨áá) á¨á ášá áá፠áĽáááĽáŤáá [á˘áá á¨á°á á á], á ááŤáŤ á¨ááá áá ááá áááĄ, á developer.apple.com ááááᥠáĽá áĽáá° á¨ááŽáááľ á áľá°áłáłáŞ áážááľ. á ááá á áááŤáá á¨áŠáŁááŤá á¨ááľáŠáĽ áá¨ááť ááłá¨áť áĽáá°á ááá áĽá áĽáá° AmazingAppMatch áŤá áľá áŤáá á á˛áľ á¨áá áá¨ááť áĽáááĽáŤááá˘
3. Fastlane áĽá á°ááá áááá፠áááááľ
á°áááá ááááąáŁ á¨ááŽáááą áá áá° á ááá áááą áĽá á ááľáĽ áĽáá°á°ááá¨á°á ááľáľáá áŤáľáááŠ
$ fastlane init
áŤááľá á¨á á ááá á ááááŽá˝ áĽáá˛ááᥠáá á¨ááᢠá áŤá°ááá á ááŤá ááá¨áĄ - á áĽá ááŽáááľ áááá.
ááŽáááą áááľ áááá˝á á¨áŤá á á˛áľ áá፠fastlane á áá - Appfile áĽá Fastfile. á á áá á ááááᣠá¨á áááááľ áá¨áá á á áááá ááľáĽ áĽáá¨ááťááᣠáĽá á Fastfile ááľáĽ áľáŤáá˝á áĽáá˝áááᣠá Fastlane á¨áááľ á ááŁáĽ ááľáĽ ááá á°áĽá áá áŤáᢠáŚáá´áááá á°ááľ áĽáá˛áŤáᥠáĽáááŤáá-
á áááąáľ á¨á˝áá á ááłá˘ ááľáĽ á ááááá ááááą áĽá áá°áá¨á°áá á á˝ áŤá ááĄá˘
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
áá°ááľ ááĽááŤáá˝á á ááŤá˝áá˛ááľ áĽá/ááá á 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.com.company* á ááá˘áá á á AmazingApp áĽá AmazingAppUITests á˘áááá˝ á Provisioning profile ááá ááľáĽ áááá˝ á áá áľá˘
áá°ááá˝á ááááŁá á ááá ááá¨áá áááŤáᢠáĽáááľ áá°
á¨áĽá á¨ááá áá¨áŤ_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
á CircleCI ááľáĽ fastlaneá áľááááááľ á¨á°áá áá¨á áááááľ áŚáá´áááá á°ááľ áĽáá˛áŤáᥠáĽáááŤááá˘
á áĽá 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_test_lab_ios_xctest á¨gcp_ááŽáááľ áá¤áľ á¨ááŽáááą áľá áá áááłá°á á áá áľá˘
á¨ááŁáŞ á
áá
áśá˝ á áŁá áĽáá ááľáááá˘
áľáŠá á ááá ᣠá á°ááłáłá áá፠ááľáĽ áááááĄ
ááá áá ááľ á ááľ 300 áśáá áá°áŁá áŁáá á á áŤáľ á°á áá¨áŤáá˝á á¨áá¨ááá á ááá á¨á áááááąá áá á á ááá á¨á ááľ á ááľ áá áĽáŠá ááᢠá¨áá፠áá¨ááá áĽááľááŁáááŁá¨áá¨áŤ áá፠1$ á áĽá áĽá 300 áśáá áá° ááłáĽá áĽááá áááᢠá¨á ááľ á ááľ á áá, ááŽáááą á áŤáľ-á°á áá° ááť áłáŞá áĽá áľ áá°áááá, áľááá áľá áááἠááŁáľ áá¨áá á áŤáľáááá.
á¨Firebase ááŽáááľ áá áá° áľáŠ áĽááááľ áĽá áá° Blaze áłáŞá áĽá áľ áĽááľá°áááá - á áá áá°áĄ áŤáá á¨ááá¨ááá ááá á áá˘
á gcloud á áááá˝ ááľáĽ á¨áá á¨Firebase ááŽáááłá˝áá áá¨áĽáŁ á¨"áłááŹáá°áŞ" áá áá ááĽáá áá¨áĽ áĽá á¨á°áá ááá¨áŞáŤ á¤áá á áĽá á¨á°áá ááłáŞáŤáá˝ áá¤áľ á¤áá á á ááá˘
á¨á፠áá° áááá ááĽá áááą "IAM áĽá á áľá°áłá°á" -> á¨á áááááľ áááŤáá˝ -> á¨á áááááľ áá፠ááá áŠ. ááŽáááąá á¨áááľá ááĽáśá˝á áĽáá°áŁááá˘
á JSON á
áá¸áľ á¨á¤áá á ááá ááá áŠ
á¨áá¨á°á JSON áľáá˝ áááś áĽááááááᣠá áá áá á¨áá¨áŤ á¤á° áá¨áŤá áĽáá°á°á ááá áĽáááá¨áłááá˘
5. CircleCI áááá
ááááŤáłá áĽáŤá áááłá - á ááá áá áá ááľá¨á á áá áľ? á¨áĽá á¨áááŁáł áá˝á á¨á áŤáŁá˘ á°áááá áá´ á¨ááá áááťá˝áá áĽá ááá˝ ááľáĽáŤá áá¨ááá˝á á°á áááą á á°á á á áááł áĽááľáá¨áá˝ áá¨áłááᢠá CircleCI ááŽáááľ ááźáśá˝ ááľáĽ á¨á áŤáŁá˘ á°ááááŽá˝á ááá¨áĄ
áĽá á¨áá¨á°ááľá á°ááááŽá˝ áŤááá:
- áááᥠGOOGLE_APPLICATION_CREDENTIALS
áĽá´áľáĄ ᨠgcloud á áááááľ áá፠ááá ᨠjson ááá áááśá˝ - áááᥠMATCH_PASSWORD
áĽá´áľáĄ á¨github áá¨ááťá á¨áĽáá á áá¨áááŤáá˝ áá ááááłáľ á¨ááá áá - áááᥠFASTLANE_PASSWORD
áĽá´áľáĄ á¨á áá ááᢠáááłá áá á¨á° áááľ áá፠ááá áá
áááŚášá áĽááľáááŁááᣠPR ááĽá¨á ááááá áá° áĄáľáá˝á á᪠áĽáááŤááá˘
áá¤áśá˝
á áĽááá ááá ááá áá áŽá˝ ááááŤáľ á ááłáŞáŤá áľááŞá áá áŞá˛áŽá á áá¨áŤ áá á¨áá áłáľ á˝ááł áŤáá áĽáŠ áĽá á¨á°á¨áá á¨áľáŤ á áá á ááá°ááᢠá áá¨áŤá ááłá ááľáĽ ᨠiPhone X ááŁáŞáŤá áá´á ááá˝áŠ ᣠáá áĽááťá á¨á°ááŤáŠ áá´áá˝ áĽá ᨠiOS áľáŞáśá˝ áĽáá¨áľ á¨á ááá áááŤá áá°áŁáá˘
ááá°áá ááá áá ááľáŽááľ ááŽáááľ á¨Firebase Test Lab á°á¨á á á°á¨á áááá áá ááááá˘
ááá: hab.com