МобилС Π¦Π˜Π¦Π” искуство: јСдан Π±Ρ€Π·ΠΈ стандард Π·Π° ΠΌΠ½ΠΎΠ³Π΅ ΠΌΠΎΠ±ΠΈΠ»Π½Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅

МобилС Π¦Π˜Π¦Π” искуство: јСдан Π±Ρ€Π·ΠΈ стандард Π·Π° ΠΌΠ½ΠΎΠ³Π΅ ΠΌΠΎΠ±ΠΈΠ»Π½Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅
Π–Π΅Π»Π΅ΠΎ Π±ΠΈΡ… Π΄Π° ΠΏΡ€ΠΈΡ‡Π°ΠΌ ΠΎ ΠΊΠΎΠ½Ρ‚ΠΈΠ½ΡƒΠΈΡ€Π°Π½ΠΎΡ˜ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜ΠΈ ΠΈ испоруци Π·Π° ΠΌΠΎΠ±ΠΈΠ»Π½Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ којС користС фастланС. Како ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°ΠΌΠΎ ЦИ/Π¦Π” Π½Π° свС ΠΌΠΎΠ±ΠΈΠ»Π½Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅, ΠΊΠ°ΠΊΠΎ смо Π΄ΠΎ Ρ‚ΠΎΠ³Π° дошли ΠΈ ΡˆΡ‚Π° сС Π½Π° ΠΊΡ€Π°Ρ˜Ρƒ Π΄ΠΎΠ³ΠΎΠ΄ΠΈΠ»ΠΎ.

На ΠΌΡ€Π΅ΠΆΠΈ Π²Π΅Ρ› ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ Π΄ΠΎΠ²ΠΎΡ™Π½ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π»Π° ΠΎ Π°Π»Π°Ρ‚Ρƒ, који Π½Π°ΠΌ јС Ρ‚ΠΎΠ»ΠΈΠΊΠΎ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ˜Π°ΠΎ Ρƒ старту, Ρ‚Π°ΠΊΠΎ Π΄Π° Π½Π°ΠΌΠ΅Ρ€Π½ΠΎ Π½Π΅Ρ›Ρƒ Π΄Π΅Ρ‚Π°Ρ™Π½ΠΎ описивати Π°Π»Π°Ρ‚, Π²Π΅Ρ› Ρ›Ρƒ сС осврнути само Π½Π° ΠΎΠ½ΠΎ ΡˆΡ‚ΠΎ смо Ρ‚Π°Π΄Π° ΠΈΠΌΠ°Π»ΠΈ:

Π§Π»Π°Π½Π°ΠΊ сС ΡΠ°ΡΡ‚ΠΎΡ˜ΠΈ ΠΈΠ· Π΄Π²Π° Π΄Π΅Π»Π°:

  • Позадина настанка ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈΡ… ЦИ/Π¦Π” Ρƒ компанији
  • Π’Π΅Ρ…Π½ΠΈΡ‡ΠΊΠΎ Ρ€Π΅ΡˆΠ΅ΡšΠ΅ Π·Π° ΡƒΠ²ΠΎΡ’Π΅ΡšΠ΅ ЦИ/Π¦Π” Π·Π° Н-Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅

ΠŸΡ€Π²ΠΈ Π΄Π΅ΠΎ јС вишС Π½ΠΎΡΡ‚Π°Π»Π³ΠΈΡ˜Π° Π·Π° старим Π΄Π°Π½ΠΈΠΌΠ°, Π° Π΄Ρ€ΡƒΠ³ΠΈ јС искуство којС ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΠΈ Π½Π° сСбС.

Π’Π°ΠΊΠΎ сС Ρ‚ΠΎ ΠΈΡΡ‚ΠΎΡ€ΠΈΡ˜ΡΠΊΠΈ дСсило

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 ΠΌΠΈΠ½ΡƒΡ‚Π° Π΄Π° сС Π½ΠΎΠ²Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° стави Ρƒ процСс - поставитС Ρ†Π΅Π²ΠΎΠ²ΠΎΠ΄ шаблона Π½Π° ЦИ ΠΈ Π΄ΠΎΠ΄Π°Ρ˜Ρ‚Π΅ ΠΊΡ™ΡƒΡ‡Π΅Π²Π΅ Ρƒ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€Π°.

Π§ΠΈΠ½ΠΈ сС Π΄Π° ΠΏΠΎΠ΅Π½Ρ‚Π° са ЀастфилС-ΠΎΠΌ Π·Π° Андроид ΠΈ потписом Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ ΠΎΡΡ‚Π°Ρ˜Π΅ нСобјашњСна; Π°ΠΊΠΎ јС Ρ‡Π»Π°Π½Π°ΠΊ Π·Π°Π½ΠΈΠΌΡ™ΠΈΠ², писаћу наставак. Π‘ΠΈΡ›Π΅ ΠΌΠΈ Π΄Ρ€Π°Π³ΠΎ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ваша ΠΏΠΈΡ‚Π°ΡšΠ° ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠ³Π΅ β€žΠΊΠ°ΠΊΠΎ бистС Ρ€Π΅ΡˆΠΈΠ»ΠΈ овај ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌβ€œ Ρƒ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΌΠ° ΠΈΠ»ΠΈ Π½Π° Π’Π΅Π»Π΅Π³Ρ€Π°ΠΌΡƒ Π±Π°ΡˆΠΊΠΈΡ€ΠΎΠ²Π°.

Π˜Π·Π²ΠΎΡ€: Π²Π²Π².Ρ…Π°Π±Ρ€.Ρ†ΠΎΠΌ

Π”ΠΎΠ΄Π°Ρ˜ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€