ΠΠ΅Π½Ρ Π·ΠΎΠ²ΡΡ ΠΠΌΠΈΡΡΠΈΠΉ, Ρ ΡΠ°Π±ΠΎΡΠ°Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠΌ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ
ΠΠΎ ΡΡΠΎΠ³ΠΎ Ρ ΡΠΆΠ΅ ΡΠ°ΡΠΏΡΠΎΠ±ΠΎΠ²Π°Π» Firebase Test Lab Π΄Π»Ρ Android ΠΈ ΠΌΠ½Π΅ Π²ΡΠ΅ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»ΠΎΡΡ, ΡΠ°ΠΊ ΡΡΠΎ Ρ ΡΠ΅ΡΠΈΠ» ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠ΅ΡΡΠΎΠ²ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ iOS ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π° ΡΠ΅ ΠΆΠ΅ ΡΠ΅Π»ΡΡΡ. ΠΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΡΠ³Π»ΠΈΡΡ ΠΈ Π½Π΅ Π²ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π»ΠΎΡΡ Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ°Π·Π°, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΡΠ΅ΡΠΈΠ» Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠ°ΡΡΡ-ΡΡΡΠΎΡΠΈΠ°Π» Π΄Π»Ρ ΡΠ΅Ρ , ΠΊΠΎΠΌΡ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠΎΠΈΡ.
ΠΡΠ°ΠΊ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ UI ΡΠ΅ΡΡΡ Π½Π° iOS ΠΏΡΠΎΠ΅ΠΊΡΠ΅, Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΆΠ΅ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΈΡ
Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΡ
Π΄Π΅Π²Π°ΠΉΡΠ°Ρ
, Π»ΡΠ±Π΅Π·Π½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ
ΠΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ΅ΠΉ ΠΠΎΠ±ΡΠ°. ΠΠ°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½Π½ΡΠΌ β Π΄ΠΎΠ±ΡΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ ΠΊΠ°Ρ.
Π ΠΏΠΎΠ²Π΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠΈ Ρ ΡΠ΅ΡΠΈΠ» ΠΎΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ ΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
β ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π½Π° 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.
Π₯ΠΎΡΠΎΡΠ΅ΠΉ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΡΠ±ΠΎΡΠΊΠΈ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π‘Ρ Π΅ΠΌΡ (Schemes). Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΡ Π΅ΠΌΡ Π΄Π»Ρ Π½Π°ΡΠΈΡ UI ΡΠ΅ΡΡΠΎΠ² [XCode -> Product -> Scheme -> New Scheme] ΠΈ Π΄Π°Π΅ΠΌ Π΅ΠΉ ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅: AmazingAppUITests.
Build ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΉ ΡΡ Π΅ΠΌΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π² ΡΠ΅Π±Ρ Target ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ β AmazingApp ΠΈ Target UI ΡΠ΅ΡΡΠΎΠ² β AmazingAppUITests β ΡΠΌ.ΡΠΊΡΠΈΠ½ΡΠΎΡ
ΠΠ°Π»Π΅Π΅, ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ UI ΡΠ΅ΡΡΠΎΠ². Π XCode ΠΊΠ»ΠΈΠΊΠ°Π΅ΠΌ ΠΏΠΎ ΡΠ°ΠΉΠ»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ Π² ΡΠ΅ΠΊΡΠΈΡ Info. ΠΠ»ΠΈΠΊΠ°Π΅ΠΌ Π½Π° β+β ΠΈ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ XCtest. ΠΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π°ΠΌ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ, Π΄Π°Π±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΠ»ΡΡΠΎΠΊ Ρ Π±ΡΠ±Π½ΠΎΠΌ ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»ΠΎ Π΄ΠΎΠΉΠ΄Π΅Ρ Π΄ΠΎ code signing.
Π Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π΅ΡΡΡ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ ΡΡΠΈ Target: ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠ½ΠΈΡ ΡΠ΅ΡΡΡ (Π²Π΅Π΄Ρ ΠΎΠ½ΠΈ Π΅ΡΡΡ, Π½Π΅ ΡΠ°ΠΊ Π»ΠΈ?) ΠΈ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π½Π°ΠΌΠΈ Target UI ΡΠ΅ΡΡΠΎΠ².
ΠΠ°Ρ ΠΎΠ΄ΠΈΠΌ Π² Target AmazingApp, Π²ΠΊΠ»Π°Π΄ΠΊΠ° Build Settings, ΡΠ°Π·Π΄Π΅Π» Code Signing Identity. ΠΠ»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ XCtest Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ iOS Developer. Π ΡΠ°Π·Π΄Π΅Π»Π΅ Code Signing Style Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Manual. Provisioning profile ΠΌΡ Π΅ΡΠ΅ Π½Π΅ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π»ΠΈ, Π½ΠΎ ΡΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΊ Π½Π΅ΠΌΡ Π²Π΅ΡΠ½Π΅ΠΌΡΡ.
ΠΠ»Ρ Target AmazingAppUITests Π΄Π΅Π»Π°Π΅ΠΌ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, Π½ΠΎ Π² Π³ΡΠ°ΡΡ Product Bundle Identifier Π²ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ com.company.amazingappuitests.
2. ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π² Apple Developer Program
ΠΠ°Ρ ΠΎΠ΄ΠΈΠΌ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ Apple Developer Program, ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ Π² ΡΠ°Π·Π΄Π΅Π» Certificates, Identifiers & Profiles ΠΈ Π·Π°ΡΠ΅ΠΌ Π² Π³ΡΠ°ΡΡ App IDs ΠΏΡΠ½ΠΊΡΠ° Identifiers. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ App ID Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ AmazingAppUITests ΠΈ bundleID com.company.amazingappuitests.
Π’Π΅ΠΏΠ΅ΡΡ Ρ Π½Π°Ρ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°ΡΡ Π½Π°ΡΠΈ ΡΠ΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠΌ, Π½ΠΎβ¦ ΠΡΠΎΡΠ΅Π΄ΡΡΠ° ΡΠ±ΠΎΡΠΊΠΈ Π±ΠΈΠ»Π΄Π° Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ ΡΠ±ΠΎΡΠΊΡ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠ±ΠΎΡΠΊΠΈ ΡΠ°Π½Π½Π΅ΡΠ° ΡΠ΅ΡΡΠΎΠ². Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΌΡ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ Π΄Π²ΡΡ
bundle ID ΠΎΠ΄Π½ΠΈΠΌ provisioning profile. ΠΠ»Π°Π³ΠΎ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΈ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ β Wildcard App ID. ΠΠΎΠ²ΡΠΎΡΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ App ID, Π½ΠΎ Π²ΠΌΠ΅ΡΡΠΎ Explicit App ID Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Wildcard App ID ΠΊΠ°ΠΊ Π½Π° ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅.
ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΡΠ°Π±ΠΎΡΠ° Ρ developer.apple.com ΠΎΠΊΠΎΠ½ΡΠ΅Π½Π°, Π½ΠΎ ΡΠ²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ ΠΎΠΊΠ½ΠΎ Π±ΡΠ°ΡΠ·Π΅ΡΠ° ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ. ΠΠ΄Π΅ΠΌ Π½Π°
ΠΠ½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠΈΡΠ°ΡΠ΅Π»Ρ Π·Π°ΠΌΠ΅ΡΠΈΠ», ΡΡΠΎ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠΉ ΡΡΠΈΠ»ΠΈΡΡ Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΈ Π°ΠΊΠΊΠ°ΡΠ½Ρ, ΠΈΠΌΠ΅ΡΡΠΈΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊΠ°ΠΊ ΠΊ Apple Developer Program, ΡΠ°ΠΊ ΠΈ ΠΊ Github. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ (Π΅ΡΠ»ΠΈ Π²Π΄ΡΡΠ³ ΡΠ°ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ) Π°ΠΊΠΊΠ°ΡΠ½Ρ Π²ΠΈΠ΄Π° [email protected], ΠΏΡΠΈΠ΄ΡΠΌΡΠ²Π°Π΅ΠΌ ΠΌΠΎΡΠ½ΡΠΉ ΠΏΠ°ΡΠΎΠ»Ρ, ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΠΌ Π΅Π³ΠΎ Π² developer.apple.com, Π½Π°Π·Π½Π°ΡΠ°Π΅ΠΌ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠ°Π»Π΅Π΅, Π΄Π°Π΅ΠΌ Π°ΠΊΠΊΠ°ΡΠ½ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ github ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΈ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π²ΡΠΎΠ΄Π΅ AmazingAppMatch.
3. ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Fastlane ΠΈ ΡΡΠΈΠ»ΠΈΡΡ match
ΠΡΠΊΡΡΠ²Π°Π΅ΠΌ ΡΠ΅ΡΠΌΠΈΠ½Π°Π», ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΡ Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ fastlane ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°Π½ΠΎ Π²
$ fastlane init
Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΡΡΠΉ ΠΏΡΠ½ΠΊΡ β ΡΡΡΠ½Π°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°.
Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π½ΠΎΠ²Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ fastlane, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π»Π΅ΠΆΠ°Ρ Π΄Π²Π° ΡΠ°ΠΉΠ»Π° β Appfile ΠΈ Fastfile. Π Π΄Π²ΡΡ
ΡΠ»ΠΎΠ²Π°Ρ
β Π² Appfile ΠΌΡ Ρ
ΡΠ°Π½ΠΈΠΌ ΡΠ»ΡΠΆΠ΅Π±Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π° Π² Fastfile ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ jobs, Π² ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Fastlane ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ lanes. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΠΊ ΠΏΡΠΎΡΡΠ΅Π½ΠΈΡ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ:
ΠΡΠΊΡΡΠ²Π°Π΅ΠΌ 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
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π» ΠΈ ΠΏΠΎ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΌΡ ΠΌΠ°Π½ΡΠ°Π»Ρ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ match.
$ fastlane match init
$ fastlane match development
ΠΠ°Π»Π΅Π΅ Π²Π²ΠΎΠ΄ΠΈΠΌ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ β ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ, Π°ΠΊΠΊΠ°ΡΠ½Ρ, ΠΏΠ°ΡΠΎΠ»Ρ ΠΈ Ρ.Π΄.
ΠΠ°ΠΆΠ½ΠΎ: ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΡΠΈΠ»ΠΈΡΠ° match ΠΏΠΎΠΏΡΠΎΡΠΈΡ Π²Π²Π΅ΡΡΠΈ ΠΏΠ°ΡΠΎΠ»Ρ Π΄Π»Ρ Π΄Π΅ΡΠΈΡΡΠΎΠ²ΠΊΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ. ΠΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΡΠΎΡ ΠΏΠ°ΡΠΎΠ»Ρ, Π½Π° ΡΡΠ°ΠΏΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ 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 Π΄Π»Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ Π±ΠΈΠ»Π΄ΠΎΠ² Π΄Π»Ρ Π²ΡΠΊΠ»Π°Π΄ΠΊΠΈ Π² Crashlytics ΠΈ/ΠΈΠ»ΠΈ AppStore, Ρ.Π΅ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ bundle ID Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠΎ, ΠΊΠ°ΠΊ ΠΌΡ ΠΏΠΎΠΌΠ½ΠΈΠΌ, Π΄Π»Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ³ΠΎ Π±ΠΈΠ»Π΄Π° ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ Wildcard ID. ΠΠΎΡΡΠΎΠΌΡ, ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ Fastfile ΠΈ Π²ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ lane:
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. Π’Π΅ΠΏΠ΅ΡΡ Ρ Π½Π°Ρ Π΅ΡΡΡ Π½ΡΠΆΠ½ΡΠΉ provisioning profile Π²ΠΈΠ΄Π° Match Development com.company.*, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π² ΡΠ΅ΠΊΡΠΈΠΈ Provisioning profile Π΄Π»Ρ ΡΠ°ΡΠ³Π΅ΡΠΎΠ² AmazingApp ΠΈ AmazingAppUITests.
ΠΡΡΠ°Π»ΠΎΡΡ Π΄ΠΎΠΏΠΈΡΠ°ΡΡ lane Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΡΠ΅ΡΡΠΎΠ². ΠΠ΄Π΅ΠΌ Π²
ΠΠΎΠΏΠΈΠΏΠ°ΡΡΠΈΠΌ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°, ΡΡΠΎΠ±Ρ Π½Π°Ρ 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 Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
ΠΠ΅ΡΠΎΠ»ΡΠ½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π½Π°Ρ Π²ΠΏΠΎΠ»Π½Π΅ ΡΡΡΡΠ°ΠΈΠ²Π°ΡΡ.
ΠΠ΅ Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ Π²ΠΊΠ»Π°Π΄ΠΊΡ, ΠΏΠΎΠ΄ ΡΠ΅ΠΌ ΠΆΠ΅ Π°ΠΊΠΊΠ°ΡΠ½ΡΠΎΠΌ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΠΌΡΡ Π²
Google Π΄Π°ΡΠΈΡ 300$ Π½Π° Π³ΠΎΠ΄, ΡΡΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π°Π²ΡΠΎΡΠ΅ΡΡΠΎΠ² ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ Π³ΠΎΠ΄Ρ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠ°. ΠΠ²ΠΎΠ΄ΠΈΠΌ ΠΏΠ»Π°ΡΠ΅ΠΆΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π΄ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΡ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠ°Π½ΠΈΡ 1$ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ 300$ Π½Π° ΡΡΠ΅Ρ. ΠΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ²ΠΈΠΈ Π³ΠΎΠ΄Π° ΠΏΡΠΎΠ΅ΠΊΡ Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½ Π½Π° Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ ΡΠ°ΡΠΈΡΠ½ΡΠΉ ΠΏΠ»Π°Π½, ΡΠ°ΠΊ ΡΡΠΎ Π²ΠΎΠ»Π½ΠΎΠ²Π°ΡΡΡΡ ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΏΠΎΡΠ΅ΡΠ΅ Π΄Π΅Π½Π΅Π³ Π½Π΅ ΡΡΠΎΠΈΡ.
ΠΠ΅ΡΠ½Π΅ΠΌΡΡ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡ Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Firebase ΠΈ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅ΠΌ Π΅Π³ΠΎ Π½Π° ΡΠ°ΡΠΈΡΠ½ΡΠΉ ΠΏΠ»Π°Π½ Blaze β ΡΠ΅ΠΏΠ΅ΡΡ Π½Π°ΠΌ Π΅ΡΡΡ ΡΠ΅ΠΌ ΠΏΠ»Π°ΡΠΈΡΡ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠ΅Π²ΡΡΠ΅Π½ΠΈΡ Π»ΠΈΠΌΠΈΡΠ°.
Π ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ gcloud Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Π½Π°Ρ Firebase ΠΏΡΠΎΠ΅ΠΊΡ, Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ½ΠΊΡ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Ρ Β«ΠΠ°ΡΠ°Π»ΠΎΠ³Β» ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Cloud Testing API ΠΈ Cloud Tools Result API.
ΠΠ°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ Π² ΠΏΡΠ½ΠΊΡ ΠΌΠ΅Π½Ρ Β«IAM ΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅Β» -> Π‘Π΅ΡΠ²ΠΈΡΠ½ΡΠ΅ Π°ΠΊΠΊΠ°ΡΠ½ΡΡ -> Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠ΅ΡΠ²ΠΈΡΠ½ΡΠΉ Π°ΠΊΠΊΠ°ΡΠ½Ρ. ΠΡΠ΄Π°Π΅ΠΌ ΠΏΡΠ°Π²Π° Π½Π° ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ API ΠΊΠ»ΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON
Π‘ΠΊΠ°ΡΠ°Π½Π½ΡΠΉ JSON ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π½Π°ΠΌ ΡΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅, Π° ΠΏΠΎΠΊΠ° Π½Π°ΡΡΡΠΎΠΉΠΊΡ Test Lab Π±ΡΠ΄Π΅ΠΌ ΡΡΠΈΡΠ°ΡΡ ΠΎΠΊΠΎΠ½ΡΠ΅Π½Π½ΠΎΠΉ.
5. ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° CircleCI
ΠΠ°Π·ΡΠ΅Π²Π°Π΅Ρ ΡΠ΅Π·ΠΎΠ½Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ β Π° ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ Ρ ΠΏΠ°ΡΠΎΠ»ΡΠΌΠΈ? ΠΠ°Π΄Π΅ΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π½Π°ΡΠΈ ΠΏΠ°ΡΠΎΠ»ΠΈ ΠΈ ΠΏΡΠΎΡΠΈΠ΅ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π½Π°ΡΠ΅ΠΉ Π±ΠΈΠ»Π΄-ΠΌΠ°ΡΠΈΠ½Ρ. Π Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° CircleCI Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Environment Variables
Π Π·Π°Π²ΠΎΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅:
- key: GOOGLE_APPLICATION_CREDENTIALS
value: ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ json ΡΠ°ΠΉΠ»Π° ΠΊΠ»ΡΡΠ° ΡΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ° gcloud - key: MATCH_PASSWORD
value: ΠΏΠ°ΡΠΎΠ»Ρ Π΄Π»Ρ Π΄Π΅ΡΠΈΡΡΠΎΠ²ΠΊΠΈ github ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Ρ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°ΠΌΠΈ - key: FASTLANE_PASSWORD
value: ΠΏΠ°ΡΠΎΠ»Ρ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΠΎΠ³ΠΎ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ° Apple Developer Portal
Π‘ΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΡΠΎΠ·Π΄Π°Π΅ΠΌ PR ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ Π½Π° review ΡΠ²ΠΎΠ΅ΠΌΡ ΡΠΈΠΌΠ»ΠΈΠ΄Ρ.
ΠΡΠΎΠ³ΠΈ
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ Π½Π΅Ρ ΠΈΡΡΡΡ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΉ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Ρ ΠΎΡΠΎΡΠΈΠΉ, ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ ΡΡΠ΅Π½Π΄ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π·Π°ΠΏΠΈΡΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π ΡΠ΅ΡΡΠΎΠ²ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ ΡΠΊΠ°Π·Π°Π» ΠΌΠΎΠ΄Π΅Π»Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π° iPhone X, Π½ΠΎ ΡΠ΅ΡΠΌΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π±ΠΎΠ³Π°ΡΡΠΉ Π²ΡΠ±ΠΎΡ ΠΈΠ· ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ Π²Π΅ΡΡΠΈΠΉ iOS.
ΠΡΠΎΡΠ°Ρ ΡΠ°ΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π° ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ Firebase Test Lab Π΄Π»Ρ Android ΠΏΡΠΎΠ΅ΠΊΡΠ°.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com