αααα»αααααα ααΈααΈααααΈ αααα»αααααΎααΆαααΆα’αααααΆααααααα
αααα»ααααα»αα αα»α
αα»αααα αααα»αααΆαααΆααααα Firebase Test Lab αααααΆαα Android αα½α α αΎα α αΎααα·αααΆα αΌαα α·αααα’αααΈαααααααααΆα ααΌα ααααα αΎαααΎααααα»ααααααα α α·αααααΆαααααααΆααα αααααΆαα ααΆααααααααααΆααααα iOS αααααααααααα ααΎααΎαααΌα ααααΆα αααα»αβααααΌαβααααΎ Google α αααΎα α αΎαβαα·αβαααβα’αααΈβαααααβαααΆαβααΆαβα ααβααΆβααΎαβααααΌαβαα ααΌα ααααβαααα»αβααΆαβαααααα βα α·αααβαααααβα’αααααβααααααβαααααΆααβα’αααβαααβαα βααΆαβααΆαβααααΆαα
ααΌα
αααα ααααα·αααΎα’αααααΆαααΆαααααΎααααα UI αα
ααΎαααααα iOS α’αααα’αΆα
ααΆαααααααααΎαααΆααα½αααΆαα
ααΎα§ααααααα·αααΆαα αΎααα
ααααααα ααααααααααα Good Corporation α αααααΆααα’αααα
αΆααα’αΆαααααα ααΌαααααΆααααααααΆααααααΆα
αα
αααα»αααΏα αααα»αααΆααααααα
α
α·ααααααααΎααα·ααααααααααΌααα½αα
ααα½α - ααααΆααα―ααααα
ααΎ 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α
α
αΌααα
ααΆααααααα Build Phases αα Target αααααΆααααααΎα α αΎααα·αα·αααααΎαααααααΆααα Target Dependencies - AmazingApp αα
αααα»α Compile Sources - AmazingAppUITests.swift α
ααΆαα’αα»ααααααα’ααΊααααΌααααα αααααααΎαααΆααααααααααααααΆαα ααΆαααααααΆαααααΆα ααααα‘ααα ααΎααααααΎααααααααΆααααααααΆααααΆαααααΎααααα UI ααααααΎα [XCode -> Product -> Scheme -> New Scheme] α αΎαααΆαααααααααΌα ααααΆα AmazingAppUITestsα
ααΆααααααΎααααααααΆααααααααΆααααααΎαααααΌααααα½ααααα αΌαααααα αααααααα·ααΈααααΆαα - ααΆαααααΎααααα AmazingApp αα·αααααα UI - AmazingAppUITests - ααΎαααΌαααα’αααααα
αααααΆαααα ααΎααααααΎαααΆαααααααα
ααΆααααααααααααΈαααααΆααααΆαααααΎααααα UI α αα
αααα»α XCode α
α»α
ααΎα―αααΆααααααα α αΎαα
αΌααα
ααΆααααααα ααααααΆαα α
α»α
ααΎ "+" α αΎααααααΎαααΆαααααααα
ααΆααααααααααααΈ α§ααΆα ααα XCtest α ααΎαααΉαααααΌαααΆαααΆαα
αααα’ααΆαα ααΎααααΈαααααΆαααΆαααΆαααΆαα½α tambourine αα
ααααα·ααΆαα’αααΈααΆαα
α»αα αααααααΆααΎααΌαα
αααΆαα αα
ααΆααααΆαααααα
α
ααα½αααΈαα
αααα»αααααααααααα’αααα αααααα·ααΈα
αααα ααΆαααααΎαααααα―αααΆ (αααααΆααααΈααΆααα’αα αα½αααΆααΆαααααα?) αα·αααΆαααΆααααα UI ααααα
αααααΎαααΆααααααΎαα
α αΌααα ααΆαα Target AmazingApp, Build Settings tab, Code Signing Identity αααααα αααααΆααααΆαααααααα ααΆαααααααα XCtest ααΌαααααΎαααΎαα’αααα’αα·αααααα iOS α αα αααα»αααααα αα ααΆαααααα α»αα αααααααΆααΎααΌα ααΌαααααΎαααΎα ααααα ααα ααΎααα·αααΆααααΆααααααΎααααααααααααΆαααααΆαααααααα α‘αΎααα ααα»ααααααΎαααΉααααααααα ααΆαα·ααα ααααααααααααα·α α
αααααΆαα Target AmazingAppUITests ααΎαααααΎααΌα ααααΆ ααα»αααααα αααα»ααα½α Product Bundle Identifier ααΎααααα αΌα com.company.amazingappuitestsα
2. αααα ααααααααααα»ααααααα·ααΈ Apple Developer Program
αα ααΆααααααααααααα·ααΈα’αααα’αα·αααααα Apple αα ααΆααααααα αα·ααααΆαααααα α’ααααααααΆα αα·ααααααααααααΆα α αΎααααααΆαααααα ααΆαααα½ααα ααααααααΆαααααααα·ααΈ ααααΆαα»αααααα’ααααααααΆαα αααααΎαααααααααΆαααααααα·ααΈααααΈα α ααΆ AmazingAppUITests αα·α bundleID com.company.amazingappuitestsα
α₯α‘αΌααααααΎαααΆαα±ααΆαααΎααααΈα
α»αα αααααααΆααΎααΆαααααΎαααααααααααΎαααΆαα½αααΉααα·ααααΆααααααααΆα
ααααα‘αααα½α ααα»αααα... ααΈαα·αα·ααΈαααααΆααααΆααααα»αααααααααααΆααααΆαααααΎαααααααΆαααααααααΉαααΆααααα»ααααααα·ααΈααααααα½αα―α αα·αααΆααααα»αα’ααααααααΆαααΆαααααα ααΌα
ααααα αΎα ααΎαααααααα»αααΉααααα αΆααααΆαα
α»αα αααααααΆααααααααΆααααααα»αα
ααα½αααΈαααΆαα½αααΉαααααααααΆαααααααα½αα ααΆααααΆαααα’ ααΆααααααααααΆαααααΆαααα αα·αααΎαααΆα - ααααααααΆαααααααα·ααΈ Wildcard α ααΎαααααΎαααααααααααααααααΆααααΆααααααΎαααααααααΆαααααααα·ααΈααααΈ ααα»αααααααα½αα±ααααααααααΆαααααααα·ααΈα
αααΆααααΆαα ααΌαααααΎαααΎαααααααααΆαααααααα·ααΈ Wildcard ααΌα
αα
αααα»αααΌαααα’ααααααα
αα
αααααα ααΎαααΆααααα
ααααΆαααααΎααΆαααΆαα½α developer.apple.com ααα»ααααααΎαααΉααα·αααααα½ααααα’α½α
αααααα·ααΈαα»αααααΆαα’ααΈαααΊαα·αααα ααααα
α’αααα’αΆααααααα α·ααααα»αααΆααααΆαααααααααΆααααΆ ααΎααααΈααααΎα§αααααααααΎααααΆααααα ααΎαααΉαααααΌαααΆαααααΆααα―ααααα½α αα·αααααΈαααααΆααα·αααα·α αΌαααααΎααΆαααααααα·ααΈ Apple Developer Program αα·α Github α ααΎααααααΎα (ααααα·αααΎααααΆαααα·αααΆαααΏααααααα) ααααΈαααααααα [α’ααΈαααααΆαααΆα]ααααΆαα½αααΆααααααααΆααααααΆαα α α»ααααααααΆααΆαα½α developer.apple.com α αΎααααααΆααααΆααΆα’ααααααααααααααααααα αααααΆαααα ααΎαααααααα·αααα·α±ααααααΈα αΌααα ααΆααααααΆαα github αααααααα»αα αα»αα’ααα α αΎααααααΎαααααΆααα―αααααααΈαα½ααααααΆααααααααΌα ααΆ AmazingAppMatch α
3. ααΆαααα‘αΎα Fastlane αα·αα§αααααααααΎααααΆαααααα»αααΆαααααα½α
ααΎαααααΆααΈα α
αΌααα
ααΆααααα―αααΆαααΆαα½ααααααα α αΎαα
αΆααααααΎα fastlane ααΌα
αααααΆααααα αΆααα
αααα»α
$ fastlane init
α’αααααΉαααααΌαααΆαααααα»αα±ααααααΎαααΎαααΆαααααααα ααΆααααααααααΆαααααΎααααΆαααααααΆαα ααααΎαααΎααααααΎαααΈαα½α - ααΆααααα ααααααααααααα
αααααααααααΆααα 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
ααΎααααα‘αααα ααααΆααΈααα·α α αΎααααααΆαααααα ααααΆαααααΌαααΆα ααΎαα αΆααααααΎαααααααα ααΆααααααααααΆαααααΌααααα
$ 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
ααΎααααααααΆαααΆααα·αααααΆααααΆααα·ααΈααα ααααα·αααΎα’αααα ααααααΎααΆαααααΌααααααΆαααα’ααΆααααΎααααΈα α»αα αααααααΆααΎααΆααααααΎααααααΆααααΆααααα αΆααα αααα»α Crashlytics αα·α/α¬ AppStore αααααΊααΎααααΈα α»αα αααααααΆααΎ bundle ID αααααααα·ααΈααααα’αααα
ααα»ααααααΌα αααααΎαα αα αΆα ααΎαααΆααααααΎαααααααααΆαα 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α
ααΆαα
αααααΎααααΈααααααααααΌααααααΆααααΆαααααΎαααααααα‘αΎαα ααααα
α αΌαα αααα-αα·αααααΆααααΈα§ααΆα αααααΎα ααΌα ααααααΆαααΆαααααααααΌαααααααΎα_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 in lane firebase_test_lab_ios_xctest αααΆαααΆαααααα gcp_project αα½αααααΌαααααααααααααααα
ααΆααααααααααΆαααΎαααΆαααααΉαααΎαααΆααα
αα»ααα·αααααΆααα
α»αααααααα
αααααααααΈααΌα
ααααΆαα
αααα»α
Google αααααααααΆααα ααα½α 300 αα»ααααΆααααα»ααα½αααααΆα ααααα αααα»αααα·ααααααΆαααααΎαααααααααααααααααα·ααΊααααΎααΉααα½αααααΆαααααΆαααααΎααααΆααααααΆαααααααα₯ααα·αααααα ααΎααααα αΌαααααααΆαααΆαααΌααΆααααααα’ααα αααα αΆαααΆαααααααΆααααΆαααααα ααα½α $1 αα·αααα½αααΆα $300 αα αααα»αααααΈααααα’αααα αααααΆααααΈαα½αααααΆα αααααααααααΉαααααΌαααΆαααααααααααααααααααααα·αα ααΆαααααΆααααααααα₯ααα·ααααα ααΌα αααααα·αα αΆαααΆα ααααα½αααΆααααα’αααΈααΆαααΆαααααααααΆαααααα’αΆα ααΎαααΆααααααα
α αΌαααΎααααααααα ααααΆααααΆαα½ααααααα Firebase α αΎααααααααΆαα αααααααααα Blaze - α₯α‘αΌαααα ααΎαααΆαα’αααΈαα½ααααααααΌαααα ααααα·αααΎααΎαααΈαααααααααααα
αα αααα»αα ααα»α αααααΆαα gcloud ααααΎαααΎααααααα Firebase ααααααΎα ααααΎαααΎαααΆαα»αααΊαα»ααα "Directory" α αΎααααααα Cloud Testing API αα·α Cloud Tools Result API α
αααααΆααααα
αΌααα
ααΆααααΆαα»αααΊαα»α "IAM αα·αααααααΆα" -> ααααΈααααΆαααα -> αααααΎαααααΈααααΆααααα ααΎαααααααα·αααα·αααα»αααΆαααααααα½αααααααα
αααααΎααα API ααΆαααααα JSON
ααΎαααΉαααααΌαααΆα JSON αααααΆαααΆαααααααα·α
ααααααα ααα»αααααααααΆαααααααα ααΎαααΉααα·α
αΆαααΆααΆαααα‘αΎα Test Lab αα½α
ααΆααα αΎαα
5. ααΆαααα‘αΎα CircleCI
αααα½αααα ααα»ααααΎαα‘αΎα - α’αααΈαααααααΌαααααΎααΆαα½αααΆααααααααΆαα? ααααααΆαα’αααααα·ααααΆααααααΆαααΈααααααΎαααααααΎαααΉααα½αααΎααααα»αααΆααααααΆαα»αααΆααααααααΆααααααααΎα αα·ααα·αααααααααΎαααααααααα αα αααα»αααΆαααααααααααα CircleCI ααααΎαααΎα Environment Variables
α αΎααααααα’αααααΌα
ααΆααααααα
- αααααΉαα GOOGLE_APPLICATION_CREDENTIALS
αααααα ααααΉαααΆαααα―αααΆα json ααααααααΈααααΆαααα gcloud - αααααΉαα MATCH_PASSWORD
αααααα ααΆαααβαααααΆααβαααααΆααβαα·ααααΈαβααααΆαα github ααΆαα½αβαα·ααααΆαααααα - αααααΉαα FASTLANE_PASSWORD
αααααα ααΆααααααααΆααααααΈα αααααΆαα ααΆαααααααααααα Apple Developer Portal
ααΎααααααΆαα»αααΆαααααΆααααααΌα αααααΎα PR α αΎαααααΎααΆαα αααααΆααααα»αααααααΎαααΎααααΈαα·αα·αααα
αααααα
ααΆααααααααα§ααΆαααααααΆααααααΆααααα ααΎαααα½αααΆαααα αααΆαααΆαααα’ αα·αααΆααααααααΆα ααΆαα½αααΉααααααααΆααααα»αααΆαααααΈααα’αΌαα ααΎα’ααααααα§ααααααα αααααααΎαααααα αα αααα»αα§ααΆα αααααΆααααα αααα»αααΆααααααΆααααΈαααΌαααα§ααααα iPhone X ααα»ααααααα·ααααΆααααααααΌααααααΎααααααααΌααααααΈααΆααα½ααααα αΌαααααΆαααααΌααααααααααααΆ αα·ααααα iOS α
αααααααΈααΈαααΉαααααΌαααΆαα§αααα·ααααααΆαααα‘αΎαααΆααα αΆαααα Firebase Test Lab αααααΆαααααααα Android α
ααααα: www.habr.com