ΠΠ΅Π»Π΅ΠΎ Π±ΠΈΡ
Π΄Π° ΠΏΡΠΈΡΠ°ΠΌ ΠΎ ΠΊΠΎΠ½ΡΠΈΠ½ΡΠΈΡΠ°Π½ΠΎΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠΈ ΠΈ ΠΈΡΠΏΠΎΡΡΡΠΈ Π·Π° ΠΌΠΎΠ±ΠΈΠ»Π½Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΊΠΎΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ ΡΠ°ΡΡΠ»Π°Π½Π΅. ΠΠ°ΠΊΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°ΠΌΠΎ Π¦Π/Π¦Π Π½Π° ΡΠ²Π΅ ΠΌΠΎΠ±ΠΈΠ»Π½Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅, ΠΊΠ°ΠΊΠΎ ΡΠΌΠΎ Π΄ΠΎ ΡΠΎΠ³Π° Π΄ΠΎΡΠ»ΠΈ ΠΈ ΡΡΠ° ΡΠ΅ Π½Π° ΠΊΡΠ°ΡΡ Π΄ΠΎΠ³ΠΎΠ΄ΠΈΠ»ΠΎ.
ΠΠ° ΠΌΡΠ΅ΠΆΠΈ Π²Π΅Ρ ΠΏΠΎΡΡΠΎΡΠΈ Π΄ΠΎΠ²ΠΎΡΠ½ΠΎ ΠΌΠ°ΡΠ΅ΡΠΈΡΠ°Π»Π° ΠΎ Π°Π»Π°ΡΡ, ΠΊΠΎΡΠΈ Π½Π°ΠΌ ΡΠ΅ ΡΠΎΠ»ΠΈΠΊΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠ°ΠΎ Ρ ΡΡΠ°ΡΡΡ, ΡΠ°ΠΊΠΎ Π΄Π° Π½Π°ΠΌΠ΅ΡΠ½ΠΎ Π½Π΅ΡΡ Π΄Π΅ΡΠ°ΡΠ½ΠΎ ΠΎΠΏΠΈΡΠΈΠ²Π°ΡΠΈ Π°Π»Π°Ρ, Π²Π΅Ρ ΡΡ ΡΠ΅ ΠΎΡΠ²ΡΠ½ΡΡΠΈ ΡΠ°ΠΌΠΎ Π½Π° ΠΎΠ½ΠΎ ΡΡΠΎ ΡΠΌΠΎ ΡΠ°Π΄Π° ΠΈΠΌΠ°Π»ΠΈ:
ΠΠ²Π°Π½ΠΈΡΠ½Π° Π€Π°ΡΡΠ»Π°Π½Π΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° ΠΡΠΈΠΌΠ΅ΡΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ° ΠΡΡΠΎΠΌΠ°ΡΠΈΠ·ΡΡΠ΅ΠΌΠΎ ΡΠ°ΡΡΠ°Π²ΡΠ°ΡΠ΅ ΠΈΠΠ‘ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ Π€Π°ΡΡΠ»Π°Π½Π΅
Π§Π»Π°Π½Π°ΠΊ ΡΠ΅ ΡΠ°ΡΡΠΎΡΠΈ ΠΈΠ· Π΄Π²Π° Π΄Π΅Π»Π°:
- ΠΠΎΠ·Π°Π΄ΠΈΠ½Π° Π½Π°ΡΡΠ°Π½ΠΊΠ° ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈΡ Π¦Π/Π¦Π Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠΈ
- Π’Π΅Ρ Π½ΠΈΡΠΊΠΎ ΡΠ΅ΡΠ΅ΡΠ΅ Π·Π° ΡΠ²ΠΎΡΠ΅ΡΠ΅ Π¦Π/Π¦Π Π·Π° Π-Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅
ΠΡΠ²ΠΈ Π΄Π΅ΠΎ ΡΠ΅ Π²ΠΈΡΠ΅ Π½ΠΎΡΡΠ°Π»Π³ΠΈΡΠ° Π·Π° ΡΡΠ°ΡΠΈΠΌ Π΄Π°Π½ΠΈΠΌΠ°, Π° Π΄ΡΡΠ³ΠΈ ΡΠ΅ ΠΈΡΠΊΡΡΡΠ²ΠΎ ΠΊΠΎΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠΈ Π½Π° ΡΠ΅Π±Π΅.
Π’Π°ΠΊΠΎ ΡΠ΅ ΡΠΎ ΠΈΡΡΠΎΡΠΈΡΡΠΊΠΈ Π΄Π΅ΡΠΈΠ»ΠΎ
2015
Π’Π΅ΠΊ ΡΠΌΠΎ ΠΏΠΎΡΠ΅Π»ΠΈ Π΄Π° ΡΠ°Π·Π²ΠΈΡΠ°ΠΌΠΎ ΠΌΠΎΠ±ΠΈΠ»Π½Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅, ΡΠ°Π΄Π° Π½ΠΈΡΠΌΠΎ Π·Π½Π°Π»ΠΈ Π½ΠΈΡΡΠ° ΠΎ ΠΊΠΎΠ½ΡΠΈΠ½ΡΠΈΡΠ°Π½ΠΎΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠΈ, ΠΎ ΠΠ΅Π²ΠΠΏΡ-Ρ ΠΈ Π΄ΡΡΠ³ΠΈΠΌ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈΠΌ ΡΡΠ²Π°ΡΠΈΠΌΠ°. Π‘Π²Π°ΠΊΡ Π½Π°Π΄ΠΎΠ³ΡΠ°Π΄ΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΡΠ°ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρ ΡΠ΅ ΠΎΠ±ΡΠ°Π²ΠΈΠΎ ΡΠ° ΡΠ²ΠΎΡΠ΅ ΠΌΠ°ΡΠΈΠ½Π΅. Π Π°ΠΊΠΎ ΡΠ΅ Π·Π° ΠΠ½Π΄ΡΠΎΠΈΠ΄ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ - ΡΠ°ΡΡΠ°Π²ΡΠ΅Π½ΠΎ, ΠΏΠΎΡΠΏΠΈΡΠ°Π½ΠΎ .apk
ΠΈ ΠΎΡΠΏΡΠ΅ΠΌΠΈΠΎ Π³Π° Π½Π° ΠΠΎΠΎΠ³Π»Π΅ ΠΠ΅Π²Π΅Π»ΠΎΠΏΠ΅Ρ Π¦ΠΎΠ½ΡΠΎΠ»Π΅, Π·Π°ΡΠΈΠΌ Π·Π° ΠΈΠΠ‘ ΡΠ°Π΄Π°ΡΡΠΈ Π°Π»Π°Ρ Π·Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΡ ΠΏΡΠ΅ΠΊΠΎ ΠΡΡΠΎΠ΄Π΅-Π° ΠΎΡΡΠ°Π²ΠΈΠΎ Π½Π°ΠΌ ΡΠ΅ ΡΡΠ°ΡΠ½Π΅ Π²Π΅ΡΠ΅ΡΠΈ - ΠΏΠΎΠΊΡΡΠ°ΡΠΈ ΠΏΡΠ΅ΡΠ·ΠΈΠΌΠ°ΡΠ° Π°ΡΡ
ΠΈΠ²Π΅ ΡΠ΅ΡΡΠΎ ΡΡ Π·Π°Π²ΡΡΠ°Π²Π°Π»ΠΈ Π³ΡΠ΅ΡΠΊΠ°ΠΌΠ° ΠΈ ΠΌΠΎΡΠ°Π»ΠΈ ΡΠΌΠΎ Π΄Π° ΠΏΠΎΠΊΡΡΠ°ΠΌΠΎ ΠΏΠΎΠ½ΠΎΠ²ΠΎ. ΠΡΠΏΠΎΡΡΠ°Π²ΠΈΠ»ΠΎ ΡΠ΅ Π΄Π° Π½Π°ΡΠ½Π°ΠΏΡΠ΅Π΄Π½ΠΈΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρ Π½Π΅ ΠΏΠΈΡΠ΅ ΠΊΠΎΠ΄ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΏΡΡΠ° ΠΌΠ΅ΡΠ΅ΡΠ½ΠΎ, Π²Π΅Ρ ΠΏΡΡΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ.
2016
ΠΠ΄ΡΠ°ΡΠ»ΠΈ ΡΠΌΠΎ, Π²Π΅Ρ ΡΠΌΠΎ ΡΠ°Π·ΠΌΠΈΡΡΠ°Π»ΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ΅ ΡΠ΅Π»ΠΎΠ³ Π΄Π°Π½Π° Π·Π° ΠΈΠ·Π΄Π°ΡΠ΅, Π° ΠΏΠΎΡΠ°Π²ΠΈΠ»Π° ΡΠ΅ ΠΈ Π΄ΡΡΠ³Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΊΠΎΡΠ° Π½Π°Ρ ΡΠ΅ ΡΠ°ΠΌΠΎ Π²ΠΈΡΠ΅ Π³ΡΡΠ½ΡΠ»Π° ΠΊΠ° Π°ΡΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡΠΈ. ΠΡΡΠ΅ Π³ΠΎΠ΄ΠΈΠ½Π΅ ΡΠΌΠΎ ΠΏΡΠ²ΠΈ ΠΏΡΡ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π»ΠΈ ΠΠ΅Π½ΠΊΠΈΠ½ΡΠ° ΠΈ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ Π³ΠΎΠΌΠΈΠ»Ρ Π·Π°ΡΡΡΠ°ΡΡΡΡΡΠΈΡ ΡΠΊΡΠΈΠΏΡΠΈ, Π²Π΅ΠΎΠΌΠ° ΡΠ»ΠΈΡΠ½ΠΈΡ ΠΎΠ½ΠΈΠΌΠ° ΠΊΠΎΡΠ΅ ΡΠ°ΡΡΠ»Π°Π½Π΅ ΠΏΠΎΠΊΠ°Π·ΡΡΠ΅ Ρ ΡΠ²ΠΎΡΠΎΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΈ.
$ xcodebuild clean archive -archivePath build/MyApp
-scheme MyApp
$ xcodebuild -exportArchive
-exportFormat ipa
-archivePath "build/MyApp.xcarchive"
-exportPath "build/MyApp.ipa"
-exportProvisioningProfile "ProvisioningProfileName"
$ cd /Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/
$ ./altool βupload-app
-f {abs path to your project}/build/{release scheme}.ipa
-u "[email protected]"
-p "PASS_APPLE_ID"
ΠΠ°ΠΆΠ°Π»ΠΎΡΡ, Π΄ΠΎ ΡΠ°Π΄Π° ΡΡ ΡΠ°ΠΌΠΎ Π½Π°ΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈ Π·Π½Π°Π»ΠΈ ΠΊΠ°ΠΊΠΎ ΠΎΠ²Π΅ ΡΠΊΡΠΈΠΏΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΡ ΠΈ Π·Π°ΡΡΠΎ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π°Π½ ΠΎΠ²Π°Ρ Π±Π΅ΡΠΊΡΠ°ΡΠ½ΠΈ Π³ΠΎΠΌΠΈΠ»Π° ΠΊΡΡΡΠ΅Π²Π°, Π° ΠΊΠ°Π΄Π° ΡΠ΅ Π½Π΅ΡΡΠΎ ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠΊΠ²Π°ΡΠΈ, Π΄ΠΎΠ±ΠΈΠ»ΠΈ ΡΡ βΠΏΡΠ΅Π»Π΅ΠΏΠ΅ Π²Π΅ΡΠ΅ΡΠΈβ Π·Π° Π°Π½Π°Π»ΠΈΠ·Ρ Π»ΠΎΠ³ΠΎΠ²Π°.
2017
ΠΠ²Π΅ Π³ΠΎΠ΄ΠΈΠ½Π΅ ΡΠΌΠΎ ΡΠ°Π·Π½Π°Π»ΠΈ Π΄Π° ΠΏΠΎΡΡΠΎΡΠΈ ΡΠ°ΠΊΠ²Π° ΡΡΠ²Π°Ρ ΠΊΠ°ΠΎ ΡΡΠΎ ΡΠ΅ ΡΠ°ΡΡΠ»Π°Π½Π΅. ΠΠΈΡΠ΅ Π±ΠΈΠ»ΠΎ ΡΠΎΠ»ΠΈΠΊΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ° ΠΊΠ°ΠΎ ΡΠ°Π΄Π° β ΠΊΠ°ΠΊΠΎ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠΈ ΡΠ΅Π΄Π½Ρ, ΠΊΠ°ΠΊΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ. Π ΡΠ°ΠΌ Π°Π»Π°Ρ ΡΠ΅ Ρ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΠΎΡ ΡΠ²Π΅ΠΊ Π±ΠΈΠΎ Π³ΡΡΠ±: ΡΡΠ°Π»Π½Π΅ Π³ΡΠ΅ΡΠΊΠ΅ ΡΡ Π½Π°Ρ ΡΠ°ΠΌΠΎ ΡΠ°Π·ΠΎΡΠ°ΡΠ°Π»Π΅ ΠΈ Π±ΠΈΠ»ΠΎ ΡΠ΅ ΡΠ΅ΡΠΊΠΎ ΠΏΠΎΠ²Π΅ΡΠΎΠ²Π°ΡΠΈ Ρ ΠΌΠ°Π³ΠΈΡΠ½Ρ Π°ΡΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡΡ ΠΊΠΎΡΡ ΡΡ ΠΎΠ±Π΅ΡΠ°Π²Π°Π»ΠΈ.
ΠΠ΅ΡΡΡΠΈΠΌ, Π³Π»Π°Π²Π½ΠΈ ΡΡΠ»ΡΠΆΠ½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΡΠΊΡΡΡΠ΅Π½ΠΈ Ρ ΡΠ°ΡΡΠ»Π°Π½Π΅ ΡΠ΅Π·Π³ΡΠΎ ΡΡ gym
ΠΈ pilot
, ΡΡΠΏΠ΅Π»ΠΈ ΡΠΌΠΎ Π΄Π° Π³Π° ΠΏΠΎΠΊΡΠ΅Π½Π΅ΠΌΠΎ.
ΠΠ°ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ΅ ΡΡ ΠΌΠ°Π»ΠΎ ΠΏΠΎΠ±ΠΎΡΡΠ°Π½Π΅.
$ fastlane gym β-workspace "Example.xcworkspace"
--scheme "AppName"
β-buildlog_path "/tmp"
-βclean
ΠΠ½ΠΈ ΡΡ ΠΏΠΎΠ±ΠΎΡΡΠ°Π½ΠΈ, Π°ΠΊΠΎ ΡΠ°ΠΌΠΎ Π·Π°ΡΠΎ ΡΡΠΎ Π½ΠΈΡΡ ΡΠ²ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π΅ΠΎΠΏΡ
ΠΎΠ΄Π½ΠΈ Π·Π° xcodebuild
, ΡΡΠ΅Π±Π° Π΄Π° Π½Π°Π·Π½Π°ΡΠΈΡΠ΅ - gym
ΡΠ°ΠΌΠΎΡΡΠ°Π»Π½ΠΎ ΡΠ΅ ΡΠ°Π·ΡΠΌΠ΅ΡΠΈ Π³Π΄Π΅ ΠΈ ΡΡΠ° Π»Π΅ΠΆΠΈ. Π Π·Π° Π²ΠΈΡΠ΅ ΡΠΈΠ½ΠΎΠ³ ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°Π²Π΅ΡΡΠΈ ΠΈΡΡΠ΅ ΡΠ°ΡΡΠ΅ΡΠ΅ ΠΊΠ°ΠΎ Ρ xcodebuild
, ΡΠ°ΠΌΠΎ ΡΠ΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΠ΅ ΡΠ°ΡΡΠ΅ΡΠ° ΡΠ°ΡΠ½ΠΈΡΠ΅.
ΠΠ²ΠΎΠ³ ΠΏΡΡΠ°, Π·Π°Ρ Π²Π°ΡΡΡΡΡΠΈ ΡΠ΅ΡΠ΅ΡΠ°Π½ΠΈ ΠΈ ΡΠ³ΡΠ°ΡΠ΅Π½ΠΎΠΌ ΠΊΡΠΏΡΠ΅ΡΡΠΈ ΡΠΎΡΠΌΠ°ΡΠ΅ΡΡ, Π΄Π½Π΅Π²Π½ΠΈΡΠΈ ΠΈΠ·Π³ΡΠ°Π΄ΡΠ΅ ΠΏΠΎΡΡΠ°Π»ΠΈ ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠΈΠ²ΠΈΡΠΈ. ΠΠ²ΠΎ ΡΠ΅ ΠΏΠΎΡΠ΅Π»ΠΎ Π΄Π° ΡΡΠ΅Π΄ΠΈ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΠΎΠΏΡΠ°Π²ΡΠ°ΡΡ ΠΏΠΎΠΊΠ²Π°ΡΠ΅Π½ΠΈΡ ΡΠΊΠ»ΠΎΠΏΠΎΠ²Π°, Π° ΠΏΠΎΠ½Π΅ΠΊΠ°Π΄ ΡΠ΅ ΡΠΈΠΌ Π·Π° ΠΈΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΌΠΎΠ³Π°ΠΎ ΡΠΎ Π΄Π° ΡΡ Π²Π°ΡΠΈ ΡΠ°ΠΌ.
ΠΠ°ΠΆΠ°Π»ΠΎΡΡ, ΠΌΠ΅ΡΠ΅ΡΠ° Π±ΡΠ·ΠΈΠ½Π΅ ΠΌΠΎΠ½ΡΠ°ΠΆΠ΅ xcodebuild
ΠΈ gym
ΠΠΈΡΠΌΠΎ ΡΠΎ ΡΡΠ°Π΄ΠΈΠ»ΠΈ, Π°Π»ΠΈ ΡΠ΅ΠΌΠΎ Π²Π΅ΡΠΎΠ²Π°ΡΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΈ - Π΄ΠΎ 30% ΡΠ±ΡΠ·Π°ΡΠ°.
ΠΠ΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈ ΠΏΡΠΎΡΠ΅Ρ Π·Π° ΡΠ²Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅
2018. Π³ΠΎΠ΄ΠΈΠ½Π° ΠΈ Π΄Π°Π½Π°Ρ
ΠΠΎ 2018. Π³ΠΎΠ΄ΠΈΠ½Π΅, ΠΏΡΠΎΡΠ΅Ρ ΠΈΠ·Π³ΡΠ°Π΄ΡΠ΅ ΠΈ ΠΏΡΡΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Ρ ΠΏΠΎΡΠΏΡΠ½ΠΎΡΡΠΈ ΡΠ΅ ΠΏΡΠ΅ΡΠ΅Π»ΠΈΠΎ Π½Π° ΠΠ΅Π½ΠΊΠΈΠ½Ρ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈ ΡΡ ΠΏΡΠ΅ΡΡΠ°Π»ΠΈ Π΄Π° ΠΈΠ·Π΄Π°ΡΡ ΡΠ° ΡΠ²ΠΎΡΠΈΡ ΠΌΠ°ΡΠΈΠ½Π°, Π° ΡΠ°ΠΌΠΎ ΡΠ΅ ΡΠΈΠΌ Π·Π° ΠΈΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΈΠΌΠ°ΠΎ ΠΏΡΠ°Π²ΠΎ Π½Π° ΠΈΠ·Π΄Π°Π²Π°ΡΠ΅.
ΠΠ΅Ρ ΡΠΌΠΎ ΠΆΠ΅Π»Π΅Π»ΠΈ Π΄Π° ΠΏΠΎΠ±ΠΎΡΡΠ°ΠΌΠΎ ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π° ΠΈ ΡΡΠ°ΡΠΈΡΠΊΠ΅ Π°Π½Π°Π»ΠΈΠ·Π΅, Π° Π½Π°ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ΅ ΡΡ ΡΠ°ΡΠ»Π΅ ΠΈ ΡΠ°ΡΠ»Π΅. Π Π°ΡΡΠ΅ ΠΈ ΠΌΠ΅ΡΠ°ΡΡ ΡΠ΅ Π·Π°ΡΠ΅Π΄Π½ΠΎ ΡΠ° Π½Π°ΡΠΈΠΌ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΠΌΠ°. Π£ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΠ΅ Π±ΠΈΠ»ΠΎ ΠΎΠΊΠΎ 10 Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°.Π‘ ΠΎΠ±Π·ΠΈΡΠΎΠΌ Π΄Π° ΠΈΠΌΠ°ΠΌΠΎ Π΄Π²Π΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅, ΡΠΎ ΡΠ΅ ΠΎΠΊΠΎ 20 βΠΆΠΈΠ²ΠΈΡ β ΡΠΊΡΠΈΠΏΡΠΈ.
Π‘Π²Π°ΠΊΠΈ ΠΏΡΡ ΠΊΠ°Π΄Π° ΡΠΌΠΎ ΠΆΠ΅Π»Π΅Π»ΠΈ Π΄Π° Π΄ΠΎΠ΄Π°ΠΌΠΎ Π½ΠΎΠ²ΠΈ ΠΊΠΎΡΠ°ΠΊ Ρ ΡΠΊΡΠΈΠΏΡΡ, ΠΌΠΎΡΠ°Π»ΠΈ ΡΠΌΠΎ Π΄Π° ΠΊΠΎΠΏΠΈΡΠ°ΠΌΠΎ ΠΈ Π·Π°Π»Π΅ΠΏΠΈΠΌΠΎ Π΄Π΅Π»ΠΎΠ²Π΅ Ρ ΡΠ²Π΅ ΡΡ Π΅Π»Π» ΡΠΊΡΠΈΠΏΡΠ΅. ΠΠΎΠΆΠ΄Π° ΡΠΌΠΎ ΠΌΠΎΠ³Π»ΠΈ Π΄Π° ΡΠ°Π΄ΠΈΠΌΠΎ ΠΏΠ°ΠΆΡΠΈΠ²ΠΈΡΠ΅, Π°Π»ΠΈ ΡΠ΅ΡΡΠΎ ΡΡ ΡΠ΅ ΡΠ°ΠΊΠ²Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅ Π·Π°Π²ΡΡΠ°Π²Π°Π»Π΅ Π³ΡΠ΅ΡΠΊΠ°ΠΌΠ° Ρ ΠΊΡΡΠ°ΡΡ, ΠΊΠΎΡΠ΅ ΡΡ ΡΠ΅ ΠΏΡΠ΅ΡΠ²Π°ΡΠ°Π»Π΅ Ρ Π²Π΅ΡΠ΅ΡΠΈ Π΄Π° ΡΠΈΠΌ Π·Π° ΠΈΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΏΠΎΠΏΡΠ°Π²ΠΈ ΡΠΊΡΠΈΠΏΡΠ΅ ΠΈ ΡΠ°Π·Π½Π° ΠΊΠΎΡΠΈ ΡΠ΅ ΠΏΠ°ΠΌΠ΅ΡΡΠ°ΠΊΠΎΠ²ΠΈΡ Π΄ΠΎΠ΄Π°ΠΎ ΠΎΠ²Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈ ΡΡΠ° ΠΎΠ½Π° Π·Π°ΠΏΡΠ°Π²ΠΎ ΡΠ°Π΄ΠΈ. ΠΠ΅Π½Π΅ΡΠ°Π»Π½ΠΎ, Π½Π΅ ΠΌΠΎΠΆΠ΅ ΡΠ΅ ΡΠ΅ΡΠΈ Π΄Π° ΡΡ ΡΠΊΡΠΈΠΏΡΠ΅ Π·Π° ΠΌΠΎΠ½ΡΠ°ΠΆΡ Π·Π° ΡΠ΅Π΄Π½Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π±ΠΈΠ»Π΅ Π±Π°Ρ Π΄ΠΎΠ½Π΅ΠΊΠ»Π΅ ΡΠ»ΠΈΡΠ½Π΅. ΠΠ°ΠΊΠΎ ΡΡ ΡΠ²Π°ΠΊΠ°ΠΊΠΎ ΡΡΠ°Π΄ΠΈΠ»ΠΈ ΠΈΡΡΠΎ.
ΠΠ° Π±ΠΈ ΡΠ΅ ΠΏΠΎΠΊΡΠ΅Π½ΡΠΎ ΠΏΡΠΎΡΠ΅Ρ Π·Π° Π½ΠΎΠ²Ρ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ, Π±ΠΈΠ»ΠΎ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΠΏΠΎΡΡΠΎΡΠΈΡΠΈ ΡΠ΅Π΄Π°Π½ Π΄Π°Π½ Π΄Π° ΡΠ΅ ΠΈΠ·Π°Π±Π΅ΡΠ΅ βΡΠ²Π΅ΠΆΠ°β Π²Π΅ΡΠ·ΠΈΡΠ° ΠΎΠ²ΠΈΡ ΡΠΊΡΠΈΠΏΡΠΈ, ΠΎΡΠΊΠ»ΠΎΠ½ΠΈ Π³ΡΠ΅ΡΠΊΠ΅ ΠΈ ΠΊΠ°ΠΆΠ΅ βΠ΄Π°, ΡΠ°Π΄ΠΈβ.
Π£ Π»Π΅ΡΠΎ 2018. ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΡΠΌΠΎ ΡΠ΅ ΠΎΡΠ²ΡΠ½ΡΠ»ΠΈ Π½Π° Π±ΡΠ·Ρ ΡΡΠ°ΠΊΡ ΠΊΠΎΡΠ° ΡΠ΅ ΡΠΎΡ ΡΠ²Π΅ΠΊ ΡΠ°Π·Π²ΠΈΡΠ°.
ΠΠ°Π΄Π°ΡΠ°ΠΊ #1: ΡΡΠΌΠΈΡΠ°ΡΡΠ΅ ΡΠ²Π΅ ΠΊΠΎΡΠ°ΠΊΠ΅ ΡΠΊΡΠΈΠΏΡΠ΅ ΠΈ ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΈΡ Π½Π°ΠΏΠΈΡΠΈΡΠ΅ Ρ Π€Π°ΡΡΡΠΈΠ»Π΅-Ρ
ΠΠ°Π΄Π° ΡΠΌΠΎ ΠΏΠΎΡΠ΅Π»ΠΈ, Π½Π°ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ΅ ΡΡ ΠΈΠ·Π³Π»Π΅Π΄Π°Π»Π΅ ΠΊΠ°ΠΎ ΠΊΡΠΏΠ° Π·Π° Π½ΠΎΠ³Π΅ ΠΊΠΎΡΠ° ΡΠ΅ ΡΠ°ΡΡΠΎΡΠΈ ΠΎΠ΄ ΡΠ²ΠΈΡ ΡΡΠ΅ΠΏΠ΅Π½ΠΈΡΠ° ΠΈ ΡΡΠ°ΠΊΠ° Ρ ΡΠ΅Π΄Π½ΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΡΡ ΡΠΊΠΎΡΠΊΠ΅ Ρ ΠΠ΅Π½ΠΊΠΈΠ½ΡΡ. ΠΠΎΡ Π½ΠΈΡΠΌΠΎ ΠΏΡΠ΅ΡΠ»ΠΈ Π½Π° ΡΠ΅Π²ΠΎΠ²ΠΎΠ΄ ΠΈ ΠΏΠΎΠ΄Π΅Π»Ρ ΠΏΠΎ Π΅ΡΠ°ΠΏΡ.
ΠΠΎΠ³Π»Π΅Π΄Π°Π»ΠΈ ΡΠΌΠΎ ΡΡΠ° ΠΈΠΌΠ°ΠΌΠΎ ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠΎΠ²Π°Π»ΠΈ 4 ΠΊΠΎΡΠ°ΠΊΠ° ΠΊΠΎΡΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°ΡΡ ΠΎΠΏΠΈΡΡ Π½Π°ΡΠ΅Π³ Π¦Π/Π¦Π-Π°:
- Π±ΡΠΈΠ»Π΄ - ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ, ΡΠΊΠ»Π°ΠΏΠ°ΡΠ΅ Π°ΡΡ ΠΈΠ²Π΅,
- ΡΠ΅ΡΡ β ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π° ΡΠ΅Π΄ΠΈΠ½ΠΈΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ°, ΠΈΠ·ΡΠ°ΡΡΠ½Π°Π²Π°ΡΠ΅ ΠΏΠΎΠΊΡΠΈΠ²Π΅Π½ΠΎΡΡΠΈ,
- ΡΠΎΠ½Π°Ρ - ΠΏΠΎΠΊΡΠ΅ΡΠ΅ ΡΠ²Π΅ Π»ΠΈΠ½ΡΠ΅ΡΠ΅ ΠΈ ΡΠ°ΡΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ°ΡΠ΅ Ρ Π‘ΠΎΠ½Π°ΡΠΡΠ±Π΅,
- Π΄Π΅ΠΏΠ»ΠΎΠΈ β ΡΠ»Π°ΡΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° Π°Π»ΡΠ° (Π’Π΅ΡΡΠ€Π»ΠΈΠ³Ρ Ρ).
Π Π°ΠΊΠΎ Π½Π΅ ΡΠ»Π°Π·ΠΈΡΠ΅ Ρ Π΄Π΅ΡΠ°ΡΠ΅, ΠΈΠ·ΠΎΡΡΠ°Π²ΡΠ°ΡΡΡΠΈ ΠΊΡΡΡΠ΅Π²Π΅ ΠΊΠΎΡΠΈ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ Ρ ΡΠ°Π΄ΡΠ°ΠΌΠ°, Π΄ΠΎΠ±ΠΈΡΠ΅ΡΠ΅ ΠΎΠ²Π°Ρ Π€Π°ΡΡΡΠΈΠ»Π΅:
default_platform(:ios)
platform :ios do
before_all do
unlock
end
desc "Build stage"
lane :build do
match
prepare_build
gym
end
desc "Prepare build stage: carthage and cocoapods"
lane :prepare_build do
pathCartfile = ""
Dir.chdir("..") do
pathCartfile = File.join(Dir.pwd, "/Cartfile")
end
if File.exist?(pathCartfile)
carthage
end
pathPodfile = ""
Dir.chdir("..") do
pathPodfile = File.join(Dir.pwd, "/Podfile")
end
if File.exist?(pathPodfile)
cocoapods
end
end
desc "Test stage"
lane :test do
scan
xcov
end
desc "Sonar stage (after run test!)"
lane :run_sonar do
slather
lizard
swiftlint
sonar
end
desc "Deploy to testflight stage"
lane :deploy do
pilot
end
desc "Unlock keychain"
private_lane :unlock do
pass = ENV['KEYCHAIN_PASSWORD']
unlock_keychain(
password: pass
)
end
end
Π£ ΡΡΠ²Π°ΡΠΈ, Π½Π°Ρ ΠΏΡΠ²ΠΈ Π€Π°ΡΡΡΠΈΠ»Π΅ ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΠΎ ΠΌΠΎΠ½ΡΡΡΡΠΎΠ·Π°Π½, Ρ ΠΎΠ±Π·ΠΈΡΠΎΠΌ Π½Π° Π½Π΅ΠΊΠ΅ ΠΎΠ΄ ΡΡΠ°ΠΊΠ° ΠΊΠΎΡΠ΅ ΡΡ Π½Π°ΠΌ ΡΠΎΡ ΡΠ²Π΅ΠΊ Π±ΠΈΠ»Π΅ ΠΏΠΎΡΡΠ΅Π±Π½Π΅ ΠΈ Π±ΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠ° ΠΊΠΎΡΠ΅ ΡΠΌΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ:
lane :build do
carthage(
command: "update",
use_binaries: false,
platform: "ios",
cache_builds: true)
cocoapods(
clean: true,
podfile: "./Podfile",
use_bundle_exec: false)
gym(
workspace: "MyApp.xcworkspace",
configuration: "Release",
scheme: "MyApp",
clean: true,
output_directory: "/build",
output_name: "my-app.ipa")
end
lane :deploy do
pilot(
username: "[email protected]",
app_identifier: "com.example.app",
dev_portal_team_id: "TEAM_ID_NUMBER_DEV",
team_id: "ITS_TEAM_ID")
end
Π£ Π³ΠΎΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΡΠ°ΠΌΠΎ Π΄Π΅ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠ° ΠΊΠΎΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° Π½Π°Π²Π΅Π΄Π΅ΠΌΠΎ: ΠΎΠ²ΠΎ ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΠΈΠ·Π³ΡΠ°Π΄ΡΠ΅ β ΡΠ΅ΠΌΠ°, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°, Π½Π°Π·ΠΈΠ²ΠΈ ΠΏΡΠΎΡΠΈΠ»Π° Π·Π° ΠΎΠ±Π΅Π·Π±Π΅ΡΠΈΠ²Π°ΡΠ΅, ΠΊΠ°ΠΎ ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ΅ β ΠΠΏΠΏΠ»Π΅ ΠΠ Π½Π°Π»ΠΎΠ³Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ°, Π»ΠΎΠ·ΠΈΠ½ΠΊΠ°, ΠΠ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΈΡΠ΄. Π½Π°. ΠΠ°ΠΎ ΠΏΡΠ²Ρ Π°ΠΏΡΠΎΠΊΡΠΈΠΌΠ°ΡΠΈΡΡ, ΡΠ²Π΅ ΠΎΠ²Π΅ ΠΊΡΡΡΠ΅Π²Π΅ ΡΡΠ°Π²ΡΠ°ΠΌΠΎ Ρ ΠΏΠΎΡΠ΅Π±Π½Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ - Gymfile
, Matchfile
ΠΈ Appfile
.
Π‘Π°Π΄Π° Ρ ΠΠ΅Π½ΠΊΠΈΠ½ΡΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΠ·ΠΈΠ²Π°ΡΠ΅ ΠΊΡΠ°ΡΠΊΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΊΠΎΡΠ΅ Π½Π΅ Π·Π°ΠΌΡΡΡΡΡ ΠΏΠΎΠ³Π»Π΅Π΄ ΠΈ Π»Π°ΠΊΠΎ ΡΡ ΡΠΈΡΡΠΈΠ²Π΅ ΠΎΠΊΠΎΠΌ:
# fastlane ios <lane_name>
$ fastlane ios build
$ fastlane ios test
$ fastlane ios run_sonar
$ fastlane ios deploy
Π£ΡΠ°, ΡΡΠΏΠ΅Ρ ΡΠΌΠΎ
Π¨ΡΠ° ΡΡΠ΅ Π΄ΠΎΠ±ΠΈΠ»ΠΈ? ΠΠ°ΡΠ½Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π·Π° ΡΠ²Π°ΠΊΠΈ ΠΊΠΎΡΠ°ΠΊ. ΠΡΠΈΡΡΠ΅Π½Π΅ ΡΠΊΡΠΈΠΏΡΠ΅, ΡΡΠ΅Π΄Π½ΠΎ ΠΏΠΎΡΠ΅ΡΠ°Π½Π΅ Ρ ΡΠ°ΡΡΠ»Π°Π½Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅. Π Π°Π΄ΡΡΡΡΠΈ ΡΠ΅, ΠΎΡΡΡΠ°Π»ΠΈ ΡΠΌΠΎ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ° ΡΡΠ°ΠΆΠ΅ΡΠΈ ΠΎΠ΄ ΡΠΈΡ Π΄Π° Π΄ΠΎΠ΄Π°ΡΡ ΡΠ²Π΅ ΡΡΠΎ ΠΈΠΌ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ Ρ ΡΠ²ΠΎΡΠ° ΡΠΏΡΠ΅ΠΌΠΈΡΡΠ°.
ΠΠ»ΠΈ Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΎΠΌ ΡΠΌΠΎ ΡΡ Π²Π°ΡΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ΠΌΠΎ Π½Π°ΠΈΡΠΈ Π½Π° ΠΈΡΡΠ΅ ΠΏΠΎΡΠ΅ΡΠΊΠΎΡΠ΅ β ΠΈ Π΄Π°ΡΠ΅ Π±ΠΈΡΠΌΠΎ ΠΈΠΌΠ°Π»ΠΈ 20 ΡΠΊΡΠΈΠΏΡΠΈ Π·Π° ΡΠΊΠ»Π°ΠΏΠ°ΡΠ΅ ΠΊΠΎΡΠ΅ Π±ΠΈ Π½Π° ΠΎΠ²Π°Ρ ΠΈΠ»ΠΈ ΠΎΠ½Π°Ρ Π½Π°ΡΠΈΠ½ ΠΏΠΎΡΠ΅Π»Π΅ Π΄Π° ΠΆΠΈΠ²Π΅ ΡΠΎΠΏΡΡΠ²Π΅Π½ΠΈΠΌ ΠΆΠΈΠ²ΠΎΡΠΎΠΌ, Π±ΠΈΠ»ΠΎ Π±ΠΈ ΡΠ΅ΠΆΠ΅ ΡΡΠ΅ΡΠΈΠ²Π°ΡΠΈ ΠΈΡ , ΠΏΠΎΡΡΠΎ Π±ΠΈ ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ΅ ΠΏΡΠ΅ΡΠ΅Π»ΠΈΠ»Π΅ Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠ΅, Π° ΡΠ°ΠΌΠΎ Π½ΠΈΡΠΌΠΎ ΠΈΠΌΠ°Π»ΠΈ ΠΏΡΠΈΡΡΡΠΏ. Π, ΡΠΎΠΏΡΡΠ΅, Π½Π° ΠΎΠ²Π°Ρ Π½Π°ΡΠΈΠ½ Π½Π΅ΡΠ΅ Π±ΠΈΡΠΈ ΠΌΠΎΠ³ΡΡΠ΅ ΡΠ΅ΡΠΈΡΠΈ Π½Π°Ρ Π±ΠΎΠ».
ΠΠ°Π΄Π°ΡΠ°ΠΊ #2: Π½Π°Π±Π°Π²ΠΈΡΠ΅ ΡΠ΅Π΄Π°Π½ Π€Π°ΡΡΡΠΈΠ»Π΅ Π·Π° Π Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°
Π‘Π°Π΄Π° ΡΠ΅ ΡΠΈΠ½ΠΈ Π΄Π° ΡΠ΅ΡΠ°Π²Π°ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π½ΠΈΡΠ΅ ΡΠ°ΠΊΠΎ ΡΠ΅ΡΠΊΠΎ - ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²Π΅ ΠΈ ΠΈΠ΄Π΅ΠΌΠΎ. ΠΠ°, Ρ ΡΡΠ²Π°ΡΠΈ, ΡΠ°ΠΊΠΎ ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠ΅ΡΠ΅Π½. ΠΠ»ΠΈ Ρ ΡΡΠ΅Π½ΡΡΠΊΡ ΠΊΠ°Π΄Π° ΡΠΌΠΎ ΡΠΎ Π·Π΅Π·Π½ΡΠ»ΠΈ, Π½ΠΈΡΠΌΠΎ ΠΈΠΌΠ°Π»ΠΈ Π½ΠΈ ΡΡΡΡΡΠ½ΠΎΡΡ Ρ ΡΠ°ΠΌΠΎΠΌ ΡΠ°ΡΡΠ»Π°Π½Π΅-Ρ, Π½ΠΈ Ρ Π ΡΠ±ΠΈ-Ρ Ρ ΠΊΠΎΡΠ΅ΠΌ ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ ΡΠ°ΡΡΠ»Π°Π½Π΅, Π½ΠΈΡΠΈ ΠΊΠΎΡΠΈΡΠ½ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠΈ - ΡΠ²ΠΈ ΠΊΠΎΡΠΈ ΡΡ ΡΠ°Π΄Π° ΠΏΠΈΡΠ°Π»ΠΈ ΠΎ ΡΠ°ΡΡΠ»Π°Π½Π΅-Ρ Π±ΠΈΠ»ΠΈ ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠ΅Π΄Π½Ρ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ Π·Π° ΡΠ΅Π΄Π°Π½ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρ.
Π€Π°ΡΡΠ»Π°Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±ΡΠ°ΡΡΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²Π΅ ΠΎΠΊΡΡΠΆΠ΅ΡΠ°, Π° ΠΌΠΈ ΡΠΌΠΎ ΡΠΎ Π²Π΅Ρ ΠΈΡΠΏΡΠΎΠ±Π°Π»ΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠ°ΡΠ΅ΠΌ Π»ΠΎΠ·ΠΈΠ½ΠΊΠ΅ Π·Π° ΠΏΡΠΈΠ²Π΅Π·Π°ΠΊ ΠΊΡΡΡΠ΅Π²Π°:
ENV['KEYCHAIN_PASSWORD']
ΠΠ°ΠΊΠΎΠ½ ΡΡΠΎ ΡΠΌΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π°Π»ΠΈ Π½Π°ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ΅, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠΎΠ²Π°Π»ΠΈ ΡΠΌΠΎ Π·Π°ΡΠ΅Π΄Π½ΠΈΡΠΊΠ΅ Π΄Π΅Π»ΠΎΠ²Π΅:
#for build, test and deploy
APPLICATION_SCHEME_NAME=appScheme
APPLICATION_PROJECT_NAME=app.xcodeproj
APPLICATION_WORKSPACE_NAME=app.xcworkspace
APPLICATION_NAME=appName
OUTPUT_IPA_NAME=appName.ipa
#app info
APP_BUNDLE_IDENTIFIER=com.example.appName
[email protected]
TEAM_ID=ABCD1234
FASTLANE_ITC_TEAM_ID=123456789
Π‘Π°Π΄Π°, Π΄Π° Π±ΠΈΡΠΌΠΎ ΠΏΠΎΡΠ΅Π»ΠΈ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ ΠΎΠ²Π΅ ΠΊΡΡΡΠ΅Π²Π΅ Ρ ΡΠ°ΡΡΠ»Π°Π½Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΠΌΠ°, ΠΌΠΎΡΠ°Π»ΠΈ ΡΠΌΠΎ Π΄Π° ΡΠΌΠΈΡΠ»ΠΈΠΌΠΎ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΈΡ
ΡΠ°ΠΌΠΎ ΠΈΡΠΏΠΎΡΡΡΠΈΠΌΠΎ. Π€Π°ΡΡΠ»Π°Π½Π΅ ΠΈΠΌΠ° ΡΠ΅ΡΠ΅ΡΠ΅ Π·Π° ΠΎΠ²ΠΎ: .env
, .env.default
, .env.development
.
Π ΠΎΠ½Π΄Π° ΡΠΌΠΎ ΠΎΠ΄Π»ΡΡΠΈΠ»ΠΈ Π΄Π° ΠΎΠ²Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ ΠΌΠ°Π»ΠΎ Π΄ΡΡΠ³Π°ΡΠΈΡΠ΅. Π₯Π°ΡΠ΄Π΅ Π΄Π° ΡΡΠ°Π²ΠΈΠΌΠΎ Ρ ΡΠΏΡΠ΅ΠΌΠΈΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ° Π½Π΅ ΡΠ°ΡΡΠ»Π°Π½Π΅ ΡΠΊΡΠΈΠΏΡΠ΅ ΠΈ ΡΠΈΡ
ΠΎΠ²Π΅ ΠΌΠ΅ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ΅, Π²Π΅Ρ ΡΠ΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π΅ ΠΊΡΡΡΠ΅Π²Π΅ ΠΎΠ²Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ Ρ Π΄Π°ΡΠΎΡΠ΅ΡΠΈ .env.appName
.
ΠΠ½ΠΈ ΡΠ°ΠΌΠΈ Fastfile
, Appfile
, Matchfile
ΠΈ Gymfile
, ΡΠ°ΠΊΡΠΈΠ»ΠΈ ΡΠΌΠΎ Π³Π° Ρ ΠΏΠΎΡΠ΅Π±Π½ΠΎ ΡΠΏΡΠ΅ΠΌΠΈΡΡΠ΅. Π’Π°ΠΌΠΎ ΡΠ΅ ΡΠ°ΠΊΡΠΈΠ²Π΅Π½Π° Π΄ΠΎΠ΄Π°ΡΠ½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΡΠ° ΠΊΡΡΡΠ΅Π²ΠΈΠΌΠ° Π»ΠΎΠ·ΠΈΠ½ΠΊΠΈ ΡΠ° Π΄ΡΡΠ³ΠΈΡ
ΡΠ΅ΡΠ²ΠΈΡΠ° - .env
.
ΠΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΠΈ ΠΏΡΠΈΠΌΠ΅Ρ
ΠΠ° Π¦Π ΠΏΠΎΠ·ΠΈΠ² ΡΠ΅ Π½ΠΈΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠΎ; Π΄ΠΎΠ΄Π°Ρ ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½ΠΈ ΠΊΡΡΡ Π·Π° ΠΎΠ΄ΡΠ΅ΡΠ΅Π½Ρ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ:
# fastlane ios <lane_name> --env appName
$ fastlane ios build --env appName
$ fastlane ios test --env appName
$ fastlane ios run_sonar --env appName
$ fastlane ios deploy --env appName
ΠΡΠ΅ ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, ΡΡΠΈΡΠ°Π²Π°ΠΌΠΎ Π½Π°ΡΠ΅ ΡΠΏΡΠ΅ΠΌΠΈΡΡΠ΅ ΡΠ° ΡΠΊΡΠΈΠΏΡΠ°ΠΌΠ°. ΠΠ΅ ΠΈΠ·Π³Π»Π΅Π΄Π° ΡΠ°ΠΊΠΎ Π»Π΅ΠΏΠΎ:
git clone [email protected]/FastlaneCICD.git fastlane_temp
cp ./fastlane_temp/fastlane/* ./fastlane/
cp ./fastlane_temp/fastlane/.env fastlane/.env
ΠΡΡΠ°Π²ΠΈΠΎ ΡΠ°ΠΌ ΠΎΠ²ΠΎ ΡΠ΅ΡΠ΅ΡΠ΅ Π·Π° ΡΠ°Π΄Π°, ΠΈΠ°ΠΊΠΎ Π€Π°ΡΡΠ»Π°Π½Π΅ ΠΈΠΌΠ° ΡΠ΅ΡΠ΅ΡΠ΅ Π·Π° ΠΏΡΠ΅ΡΠ·ΠΈΠΌΠ°ΡΠ΅ Π€Π°ΡΡΡΠΈΠ»Π΅ ΠΏΡΠ΅ΠΊΠΎ import_from_git
, Π°Π»ΠΈ ΡΠ°Π΄ΠΈ ΡΠ°ΠΌΠΎ Π·Π° Π€Π°ΡΡΡΠΈΠ»Π΅, Π°Π»ΠΈ Π½Π΅ ΠΈ Π·Π° Π΄ΡΡΠ³Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅. ΠΠΊΠΎ ΠΆΠ΅Π»ΠΈΡΠ΅ βΡΡΠ²Π°ΡΠ½ΠΎ Π»Π΅ΠΏΠΎβ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΠΈ ΡΠ²ΠΎΡΠ΅ action
.
Π‘Π»ΠΈΡΠ°Π½ ΡΠ΅Ρ ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΡΠ΅Π½ Π·Π° ΠΠ½Π΄ΡΠΎΠΈΠ΄ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΈ Π Π΅Π°ΡΡΠΠ°ΡΠΈΠ²Π΅, Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ ΡΡ Ρ ΠΈΡΡΠΎΠΌ ΡΠΏΡΠ΅ΠΌΠΈΡΡΡ, Π°Π»ΠΈ Ρ ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈΠΌ Π³ΡΠ°Π½Π°ΠΌΠ° iOS
, android
ΠΈ react_native
.
ΠΠ°Π΄Π° ΡΠΈΠΌ Π·Π° ΠΈΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΆΠ΅Π»ΠΈ Π΄Π° Π΄ΠΎΠ΄Π° Π½Π΅ΠΊΠΈ Π½ΠΎΠ²ΠΈ ΠΊΠΎΡΠ°ΠΊ, ΠΏΡΠΎΠΌΠ΅Π½Π΅ Ρ ΡΠΊΡΠΈΠΏΡΠΈ ΡΠ΅ ΡΠ½ΠΈΠΌΠ°ΡΡ ΠΏΡΠ΅ΠΊΠΎ ΠΠ -Π° Ρ Π³ΠΈΡ-Ρ, Π²ΠΈΡΠ΅ Π½Π΅ΠΌΠ° ΠΏΠΎΡΡΠ΅Π±Π΅ Π΄Π° ΡΠ΅ ΡΡΠ°ΠΆΠ΅ ΠΊΡΠΈΠ²ΡΠΈ Π·Π° ΠΏΠΎΠΊΠ²Π°ΡΠ΅Π½Π΅ ΡΠΊΡΠΈΠΏΡΠ΅, ΠΈ ΡΠΎΠΏΡΡΠ΅, ΡΠ°Π΄Π° ΠΌΠΎΡΠ°ΡΠ΅ Π΄Π° ΠΏΠΎΠΊΡΡΠ°ΡΠ΅ Π΄Π° Π³Π° ΡΠ°Π·Π±ΠΈΡΠ΅ΡΠ΅.
Π‘Π°Π΄Π° ΡΠ΅ ΡΠΎ ΡΠΎ ΡΠΈΠ³ΡΡΠ½ΠΎ
Π Π°Π½ΠΈΡΠ΅ ΡΠΌΠΎ ΡΡΠΎΡΠΈΠ»ΠΈ Π²ΡΠ΅ΠΌΠ΅ ΠΎΠ΄ΡΠΆΠ°Π²Π°ΡΡΡΠΈ ΡΠ²Π΅ ΡΠΊΡΠΈΠΏΡΠ΅, Π°ΠΆΡΡΠΈΡΠ°ΡΡΡΠΈ ΠΈΡ ΠΈ ΠΏΠΎΠΏΡΠ°Π²ΡΠ°ΡΡΡΠΈ ΡΠ²Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΈΡΠ΅ Π°ΠΆΡΡΠΈΡΠ°ΡΠ°. ΠΠΈΠ»ΠΎ ΡΠ΅ Π²Π΅ΠΎΠΌΠ° ΡΠ°Π·ΠΎΡΠ°ΡΠ°Π²Π°ΡΡΡΠ΅ ΠΊΠ°Π΄Π° ΡΡ ΡΠ°Π·Π»ΠΎΠ·ΠΈ Π·Π° Π³ΡΠ΅ΡΠΊΠ΅ ΠΈ Π·Π°ΡΡΠΎΡΠ΅ Ρ ΠΈΠ·Π΄Π°ΡΠΈΠΌΠ° Π±ΠΈΠ»Π΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π΅ Π³ΡΠ΅ΡΠΊΠ΅ Ρ ΠΊΡΡΠ°ΡΡ ΠΊΠΎΡΠ΅ ΡΠ΅ Π±ΠΈΠ»ΠΎ ΡΠ°ΠΊΠΎ ΡΠ΅ΡΠΊΠΎ ΠΏΡΠ°ΡΠΈΡΠΈ Ρ Π·Π±ΡΡΠΈ ΡΡ Π΅Π»Π» ΡΠΊΡΠΈΠΏΡΠΈ. Π‘Π°Π΄Π° ΡΡ ΡΠ°ΠΊΠ²Π΅ Π³ΡΠ΅ΡΠΊΠ΅ ΡΠ²Π΅Π΄Π΅Π½Π΅ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΡΠΌ. ΠΡΠΎΠΌΠ΅Π½Π΅ ΡΠ΅ ΡΠ²ΠΎΠ΄Π΅ Ρ ΡΠ²Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΎΠ΄ΡΠ΅Π΄Π½ΠΎΠΌ. Π ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΡΠ΅ 15 ΠΌΠΈΠ½ΡΡΠ° Π΄Π° ΡΠ΅ Π½ΠΎΠ²Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΡΡΠ°Π²ΠΈ Ρ ΠΏΡΠΎΡΠ΅Ρ - ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΡΠ΅Π²ΠΎΠ²ΠΎΠ΄ ΡΠ°Π±Π»ΠΎΠ½Π° Π½Π° Π¦Π ΠΈ Π΄ΠΎΠ΄Π°ΡΡΠ΅ ΠΊΡΡΡΠ΅Π²Π΅ Ρ ΡΠΏΡΠ΅ΠΌΠΈΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ°.
Π§ΠΈΠ½ΠΈ ΡΠ΅ Π΄Π° ΠΏΠΎΠ΅Π½ΡΠ° ΡΠ° Π€Π°ΡΡΡΠΈΠ»Π΅-ΠΎΠΌ Π·Π° ΠΠ½Π΄ΡΠΎΠΈΠ΄ ΠΈ ΠΏΠΎΡΠΏΠΈΡΠΎΠΌ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΎΡΡΠ°ΡΠ΅ Π½Π΅ΠΎΠ±ΡΠ°ΡΡΠ΅Π½Π°; Π°ΠΊΠΎ ΡΠ΅ ΡΠ»Π°Π½Π°ΠΊ Π·Π°Π½ΠΈΠΌΡΠΈΠ², ΠΏΠΈΡΠ°ΡΡ Π½Π°ΡΡΠ°Π²Π°ΠΊ. ΠΠΈΡΠ΅ ΠΌΠΈ Π΄ΡΠ°Π³ΠΎ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π²Π°ΡΠ° ΠΏΠΈΡΠ°ΡΠ° ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠ³Π΅ βΠΊΠ°ΠΊΠΎ Π±ΠΈΡΡΠ΅ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΎΠ²Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌβ Ρ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΠΌΠ° ΠΈΠ»ΠΈ Π½Π° Π’Π΅Π»Π΅Π³ΡΠ°ΠΌΡ
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ Π°Π±Ρ.ΡΠΎΠΌ