แƒ›แƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒ˜ CICD แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ”แƒ‘แƒ: แƒ”แƒ แƒ—แƒ˜ แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒ˜ แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒ›แƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก

แƒ›แƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒ˜ CICD แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ”แƒ‘แƒ: แƒ”แƒ แƒ—แƒ˜ แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒ˜ แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒ›แƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก
แƒ›แƒกแƒฃแƒ แƒก แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ แƒ›แƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒฃแƒฌแƒงแƒ•แƒ”แƒข แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒแƒกแƒ แƒ“แƒ แƒ›แƒ˜แƒฌแƒแƒ“แƒ”แƒ‘แƒแƒ–แƒ” fastlane-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ แƒแƒ’แƒแƒ  แƒ•แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ— CI/CD-แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒแƒ‘แƒ˜แƒšแƒฃแƒ  แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒ–แƒ”, แƒ แƒแƒ’แƒแƒ  แƒ›แƒ˜แƒ•แƒ”แƒ“แƒ˜แƒ— แƒ˜แƒฅ แƒ“แƒ แƒ แƒ แƒ›แƒแƒฎแƒ“แƒ แƒ‘แƒแƒšแƒแƒก.

แƒฅแƒกแƒ”แƒšแƒจแƒ˜ แƒฃแƒ™แƒ•แƒ” แƒแƒ แƒ˜แƒก แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ แƒ›แƒแƒกแƒแƒšแƒ แƒฎแƒ”แƒšแƒกแƒแƒฌแƒงแƒแƒ–แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒกแƒ” แƒ’แƒ•แƒแƒ™แƒšแƒ“แƒ แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒจแƒ˜, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒจแƒ”แƒ’แƒœแƒ”แƒ‘แƒฃแƒšแƒแƒ“ แƒแƒ  แƒแƒฆแƒ•แƒฌแƒ”แƒ  แƒฎแƒ”แƒšแƒกแƒแƒฌแƒงแƒแƒก แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒแƒ“, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒ˜แƒ•แƒ›แƒแƒ แƒ—แƒแƒ• แƒ˜แƒ›แƒแƒก, แƒ แƒแƒช แƒ›แƒแƒจแƒ˜แƒœ แƒ’แƒ•แƒฅแƒแƒœแƒ“แƒ:

แƒกแƒขแƒแƒขแƒ˜แƒ แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ แƒแƒ แƒ˜ แƒœแƒแƒฌแƒ˜แƒšแƒ˜แƒกแƒแƒ’แƒแƒœ:

  • แƒ™แƒแƒ›แƒžแƒแƒœแƒ˜แƒแƒจแƒ˜ แƒ›แƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒ˜ CI/CD-แƒ˜แƒก แƒ’แƒแƒฉแƒ”แƒœแƒ˜แƒก แƒคแƒแƒœแƒ˜
  • แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ CI/CD-แƒ˜แƒก แƒ’แƒแƒกแƒแƒจแƒšแƒ”แƒšแƒแƒ“ N-แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก

แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒฃแƒคแƒ แƒ แƒซแƒ•แƒ”แƒšแƒ˜ แƒ“แƒ แƒแƒ˜แƒก แƒœแƒแƒกแƒขแƒแƒšแƒ’แƒ˜แƒแƒ, แƒ›แƒ”แƒแƒ แƒ” แƒ™แƒ˜ แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒกแƒแƒ™แƒฃแƒ—แƒแƒ  แƒ—แƒแƒ•แƒก แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒแƒ—.

แƒแƒกแƒ” แƒ›แƒแƒฎแƒ“แƒ แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒฃแƒšแƒแƒ“

แƒฌแƒ”แƒšแƒ˜ 2015

แƒฉแƒ•แƒ”แƒœ แƒแƒฎแƒšแƒแƒฎแƒแƒœ แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒ”แƒ— แƒ›แƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒแƒ แƒแƒคแƒ”แƒ แƒ˜ แƒ•แƒ˜แƒชแƒแƒ“แƒ˜แƒ— แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ˜แƒก, DevOps-แƒ˜แƒก แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒ›แƒแƒ“แƒฃแƒ แƒ˜ แƒœแƒ˜แƒ•แƒ—แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒฃแƒจแƒ•แƒ แƒ—แƒแƒ•แƒแƒ“ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ›แƒ แƒ—แƒแƒ•แƒ˜แƒกแƒ˜ แƒ™แƒแƒ›แƒžแƒ˜แƒฃแƒขแƒ”แƒ แƒ˜แƒ“แƒแƒœ. แƒ“แƒ แƒ—แƒฃ Android-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ”แƒก แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒ - แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒ˜, แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ .apk แƒ“แƒ แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ แƒ˜แƒ’แƒ˜ Google Developer Console-แƒจแƒ˜, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ iOS-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก Xcode-แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ’แƒแƒ•แƒ แƒชแƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒฎแƒ”แƒšแƒกแƒแƒฌแƒงแƒ แƒ“แƒแƒ’แƒ•แƒ˜แƒขแƒแƒ•แƒ แƒจแƒ”แƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒ˜ แƒกแƒแƒฆแƒแƒ›แƒแƒ”แƒ‘แƒ˜ - แƒแƒ แƒฅแƒ˜แƒ•แƒ˜แƒก แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ›แƒชแƒ“แƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒ›แƒ—แƒแƒ•แƒ แƒ“แƒ”แƒ‘แƒแƒ“แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒ— แƒ“แƒ แƒ’แƒ•แƒ˜แƒฌแƒ”แƒ•แƒ“แƒ แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒชแƒ“แƒ. แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ, แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒแƒฌแƒ˜แƒœแƒแƒ•แƒ” แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜ แƒ—แƒ•แƒ”แƒจแƒ˜ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒฏแƒ”แƒ แƒ›แƒ” แƒแƒ  แƒฌแƒ”แƒ แƒก แƒ™แƒแƒ“แƒก, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒแƒ•แƒ แƒชแƒ”แƒšแƒ”แƒ‘แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒก.

แƒฌแƒ”แƒšแƒ˜ 2016

แƒ’แƒแƒ•แƒ˜แƒ–แƒแƒ แƒ“แƒ”แƒ—, แƒฃแƒ™แƒ•แƒ” แƒ’แƒ•แƒฅแƒแƒœแƒ“แƒ แƒคแƒ˜แƒฅแƒ แƒ”แƒ‘แƒ˜ แƒ˜แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ’แƒ•แƒ”แƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒšแƒ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ“แƒฆแƒ˜แƒ“แƒแƒœ แƒ“แƒ แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ แƒ›แƒ”แƒแƒ แƒ” แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒช, แƒ แƒแƒ›แƒ”แƒšแƒ›แƒแƒช แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒ™แƒ”แƒœ แƒ›แƒ˜แƒ‘แƒ˜แƒซแƒ’แƒ. แƒ˜แƒ›แƒแƒ•แƒ” แƒฌแƒ”แƒšแƒก แƒฉแƒ•แƒ”แƒœ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“ แƒ“แƒแƒ•แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ— แƒฏแƒ”แƒœแƒ™แƒ˜แƒœแƒกแƒ˜ แƒ“แƒ แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒ”แƒ— แƒกแƒแƒจแƒ˜แƒœแƒ”แƒšแƒ˜ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜แƒก แƒ—แƒแƒ˜แƒ’แƒฃแƒšแƒ˜, แƒซแƒแƒšแƒ˜แƒแƒœ แƒ’แƒแƒ•แƒก แƒ›แƒแƒ—, แƒ แƒแƒกแƒแƒช fastlane แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก แƒ—แƒแƒ•แƒ˜แƒก แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒแƒจแƒ˜.

$ 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

แƒฌแƒ”แƒšแƒก แƒ’แƒแƒ•แƒ˜แƒ’แƒ”แƒ—, แƒ แƒแƒ› แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ˜แƒกแƒ”แƒ—แƒ˜ แƒ แƒแƒ›, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ fastlane. แƒแƒ  แƒ˜แƒงแƒ แƒ˜แƒ›แƒ“แƒ”แƒœแƒ˜ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒช แƒแƒฎแƒšแƒแƒ - แƒ แƒแƒ’แƒแƒ  แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒแƒ—, แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ. แƒ“แƒ แƒ—แƒแƒ•แƒแƒ“ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ แƒ˜แƒ› แƒ“แƒ แƒแƒก แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒฃแƒฎแƒ”แƒจแƒ˜ แƒ˜แƒงแƒ: แƒ›แƒฃแƒ“แƒ›แƒ˜แƒ•แƒ›แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ›แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒ›แƒ”แƒ“แƒ’แƒแƒชแƒ แƒฃแƒ”แƒ‘แƒ แƒ“แƒแƒ’แƒ•แƒแƒ™แƒแƒ แƒ’แƒ•แƒ˜แƒœแƒ แƒ“แƒ แƒซแƒœแƒ”แƒšแƒ˜ แƒ“แƒแƒกแƒแƒฏแƒ”แƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ˜แƒงแƒ แƒ˜แƒ› แƒฏแƒแƒ“แƒแƒกแƒœแƒฃแƒ แƒ˜ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ’แƒ•แƒžแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ“แƒœแƒ”แƒœ.

แƒ—แƒฃแƒ›แƒชแƒ, แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒ™แƒแƒ›แƒฃแƒœแƒแƒšแƒฃแƒ แƒ˜ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ“แƒ˜แƒก fastlane แƒ‘แƒ˜แƒ แƒ—แƒ•แƒจแƒ˜ gym ะธ pilot, แƒฉแƒ•แƒ”แƒœ แƒ›แƒแƒ•แƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ— แƒ›แƒ˜แƒกแƒ˜ แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ.

แƒฉแƒ•แƒ”แƒœแƒ˜ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜ แƒชแƒแƒขแƒแƒ—แƒ˜ แƒ’แƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ“แƒ.

$ fastlane gym  โ€”-workspace "Example.xcworkspace" 
                --scheme "AppName" 
                โ€”-buildlog_path "/tmp" 
                -โ€”clean

แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ’แƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ“แƒ, แƒ—แƒฃแƒœแƒ“แƒแƒช แƒ˜แƒ›แƒ˜แƒขแƒแƒ›, แƒ แƒแƒ› แƒแƒ  แƒแƒ แƒ˜แƒก แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜ xcodebuild, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒแƒ— - gym แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒšแƒแƒ“ แƒ’แƒแƒ˜แƒ’แƒ”แƒ‘แƒก แƒกแƒแƒ“ แƒ“แƒ แƒ แƒ แƒ“แƒ”แƒ•แƒก. แƒ“แƒ แƒ›แƒ”แƒขแƒ˜ แƒ“แƒแƒ–แƒฃแƒกแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒแƒ— แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒ™แƒšแƒแƒ•แƒ˜แƒจแƒ”แƒ‘แƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒแƒฅ xcodebuild, แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒแƒ แƒฃแƒคแƒ แƒ แƒœแƒแƒ—แƒ”แƒšแƒ˜.

แƒแƒ›แƒฏแƒ”แƒ แƒแƒ“, แƒกแƒแƒ•แƒแƒ แƒฏแƒ˜แƒจแƒ แƒ“แƒแƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒ“แƒ แƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ xcpretty แƒคแƒแƒ แƒ›แƒแƒขแƒ˜แƒก แƒฌแƒงแƒแƒšแƒแƒ‘แƒ˜แƒ—, build logs แƒ’แƒแƒฎแƒ“แƒ แƒ‘แƒ”แƒ•แƒ แƒแƒ“ แƒฃแƒคแƒ แƒ แƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ‘แƒ. แƒแƒ›แƒแƒœ แƒ“แƒแƒ˜แƒฌแƒงแƒ แƒ“แƒ แƒแƒ˜แƒก แƒ“แƒแƒ–แƒแƒ’แƒ•แƒ แƒ’แƒแƒขแƒ”แƒฎแƒ˜แƒšแƒ˜ แƒแƒกแƒแƒ›แƒ‘แƒšแƒ”แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ™แƒ”แƒ—แƒ”แƒ‘แƒแƒ–แƒ” แƒ“แƒ แƒ–แƒแƒ’แƒฏแƒ”แƒ  แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ’แƒฃแƒœแƒ“แƒก แƒจแƒ”แƒ”แƒซแƒšแƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒ•แƒ แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒšแƒแƒ“.

แƒกแƒแƒ›แƒฌแƒฃแƒฎแƒแƒ แƒแƒ“, แƒจแƒ”แƒ™แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ˜แƒก แƒ’แƒแƒ–แƒแƒ›แƒ•แƒ”แƒ‘แƒ˜ xcodebuild ะธ gym แƒฉแƒ•แƒ”แƒœ แƒ”แƒก แƒแƒ  แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ”แƒ—, แƒ›แƒแƒ’แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒ•แƒ”แƒœแƒ“แƒแƒ‘แƒ˜แƒ— แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒแƒก - 30%-แƒ›แƒ“แƒ” แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ”.

แƒ”แƒ แƒ—แƒ˜ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒ’แƒแƒœแƒแƒชแƒฎแƒแƒ“แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก

2018 แƒฌแƒ”แƒšแƒ˜ แƒ“แƒ แƒ“แƒฆแƒ”แƒ›แƒ“แƒ”

2018 แƒฌแƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒกแƒ แƒ“แƒ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒแƒ“ แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒ แƒฏแƒ”แƒœแƒ™แƒ˜แƒœแƒกแƒจแƒ˜, แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒ›แƒ แƒจแƒ”แƒฌแƒงแƒ•แƒ˜แƒขแƒ”แƒก แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒ—แƒแƒ•แƒ˜แƒแƒœแƒ—แƒ˜ แƒ›แƒแƒœแƒฅแƒแƒœแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ’แƒฃแƒœแƒ“แƒก แƒฐแƒฅแƒแƒœแƒ“แƒ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒฃแƒคแƒšแƒ”แƒ‘แƒ.

แƒฉแƒ•แƒ”แƒœ แƒฃแƒ™แƒ•แƒ” แƒ’แƒ•แƒ˜แƒœแƒ“แƒแƒ“แƒ แƒขแƒ”แƒกแƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒ แƒ“แƒ แƒฉแƒ•แƒ”แƒœแƒ˜ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜ แƒ˜แƒ–แƒ แƒ“แƒ”แƒ‘แƒแƒ“แƒ แƒ“แƒ แƒ˜แƒ–แƒ แƒ“แƒ”แƒ‘แƒแƒ“แƒ. แƒ’แƒแƒ˜แƒ–แƒแƒ แƒ“แƒ แƒ“แƒ แƒจแƒ”แƒ˜แƒชแƒ•แƒแƒšแƒ แƒฉแƒ•แƒ”แƒœแƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“. แƒ˜แƒ› แƒ“แƒ แƒแƒก แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 10 แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒ˜แƒงแƒ, แƒ—แƒฃ แƒ’แƒแƒ•แƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ‘แƒ—, แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒแƒ แƒ˜ แƒžแƒšแƒแƒขแƒคแƒแƒ แƒ›แƒ, แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 20 โ€žแƒชแƒแƒชแƒฎแƒแƒšแƒ˜โ€œ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜.

แƒงแƒแƒ•แƒ”แƒš แƒฏแƒ”แƒ แƒ–แƒ”, แƒ แƒแƒชแƒ แƒ’แƒ•แƒ˜แƒœแƒ“แƒแƒ“แƒ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒจแƒ˜ แƒแƒฎแƒแƒšแƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ, แƒ’แƒ•แƒ˜แƒฌแƒ”แƒ•แƒ“แƒ แƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ-แƒžแƒแƒกแƒขแƒ”แƒขแƒ˜ แƒงแƒ•แƒ”แƒšแƒ shell แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒจแƒ˜. แƒจแƒ”แƒกแƒแƒซแƒšแƒแƒ, แƒจแƒ”แƒ’แƒ•แƒ”แƒซแƒšแƒ แƒฃแƒคแƒ แƒ แƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒแƒ“ แƒ’แƒ•แƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒแƒกแƒ”แƒ—แƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ›แƒ—แƒแƒ•แƒ แƒ“แƒ”แƒ‘แƒแƒ“แƒ แƒ‘แƒ”แƒญแƒ“แƒ•แƒ˜แƒ—แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒ—, แƒ แƒแƒช แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ’แƒฃแƒœแƒ“แƒจแƒ˜ แƒ’แƒแƒ“แƒแƒ˜แƒ–แƒแƒ แƒ“แƒ แƒกแƒแƒฆแƒแƒ›แƒแƒ”แƒ‘แƒแƒ“, แƒ แƒแƒ—แƒ แƒ’แƒแƒ”แƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ˜แƒœแƒแƒ— แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ’แƒแƒ”แƒ’แƒแƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ›แƒ แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ›แƒ แƒ“แƒแƒแƒ›แƒแƒขแƒ แƒ”แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ แƒ“แƒ แƒ แƒแƒก แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก แƒ˜แƒก แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜. แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒแƒ  แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒ—แƒฅแƒ•แƒแƒก, แƒ แƒแƒ› แƒ”แƒ แƒ—แƒ˜ แƒžแƒšแƒแƒขแƒคแƒแƒ แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒ™แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜ แƒ›แƒแƒ˜แƒœแƒช แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒฌแƒ˜แƒšแƒแƒ“ แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒ˜แƒงแƒ. แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› แƒ›แƒแƒ—, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ”แƒก.

แƒแƒฎแƒแƒšแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒงแƒ”แƒ‘แƒแƒ“, แƒกแƒแƒญแƒ˜แƒ แƒ แƒ˜แƒงแƒ แƒ”แƒ แƒ—แƒ˜ แƒ“แƒฆแƒ˜แƒก แƒ“แƒแƒฎแƒแƒ แƒฏแƒ•แƒ แƒแƒ› แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜แƒก โ€žแƒแƒฎแƒแƒšแƒ˜โ€œ แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ แƒฉแƒ”แƒ•แƒแƒ“, แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒ˜แƒ›แƒ˜แƒก แƒ—แƒฅแƒ›แƒ, แƒ แƒแƒ› โ€žแƒ“แƒ˜แƒแƒฎ, แƒ›แƒฃแƒจแƒแƒแƒ‘แƒกโ€œ.

2018 แƒฌแƒšแƒ˜แƒก แƒ–แƒแƒคแƒฎแƒฃแƒšแƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒฎแƒ”แƒš แƒจแƒ”แƒ•แƒฎแƒ”แƒ“แƒ”แƒ— แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒแƒ“ แƒกแƒฌแƒ แƒแƒค แƒ–แƒแƒšแƒก.

แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ #1: แƒจแƒ”แƒแƒฏแƒแƒ›แƒ”แƒ— แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ แƒ“แƒ แƒ’แƒแƒ“แƒแƒฌแƒ”แƒ แƒ”แƒ— แƒ˜แƒกแƒ˜แƒœแƒ˜ Fastfile-แƒจแƒ˜

แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒ”แƒ—, แƒฉแƒ•แƒ”แƒœแƒ˜ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜ แƒฌแƒแƒแƒ’แƒแƒ•แƒ“แƒ แƒคแƒ”แƒฎแƒกแƒแƒชแƒ›แƒšแƒ˜แƒก แƒฅแƒกแƒแƒ•แƒ˜แƒšแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒแƒ“แƒ แƒงแƒ•แƒ”แƒšแƒ แƒกแƒแƒคแƒ”แƒฎแƒฃแƒ แƒ˜แƒกแƒ’แƒแƒœ แƒ“แƒ แƒงแƒแƒ•แƒแƒ แƒฏแƒœแƒ”แƒ‘แƒ˜แƒกแƒแƒ’แƒแƒœ แƒฏแƒ”แƒœแƒ™แƒ˜แƒœแƒกแƒ˜แƒก แƒ”แƒ แƒ— แƒ’แƒแƒ แƒกแƒจแƒ˜. แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ–แƒ” แƒ“แƒ แƒ”แƒขแƒแƒžแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“ แƒ“แƒแƒงแƒแƒคแƒแƒ–แƒ” แƒฏแƒ”แƒ  แƒแƒ  แƒ’แƒแƒ“แƒแƒ•แƒ”แƒ“แƒ˜แƒ—.

แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒ”แƒ— แƒ แƒ แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒ“แƒ แƒ’แƒแƒ›แƒแƒ•แƒแƒ•แƒšแƒ˜แƒœแƒ”แƒ— 4 แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ”แƒกแƒแƒ‘แƒแƒ›แƒ”แƒ‘แƒ แƒฉแƒ•แƒ”แƒœแƒ˜ CI/CD-แƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒแƒก:

  • แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ - แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ, แƒแƒ แƒฅแƒ˜แƒ•แƒ˜แƒก แƒแƒฌแƒงแƒแƒ‘แƒ,
  • แƒขแƒ”แƒกแƒขแƒ˜ - แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜แƒก แƒ”แƒ แƒ—แƒ”แƒฃแƒšแƒ˜แƒก แƒขแƒ”แƒกแƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ, แƒ“แƒแƒคแƒแƒ แƒ•แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ—แƒ•แƒšแƒ,
  • แƒกแƒแƒœแƒแƒ แƒ˜ - แƒฃแƒจแƒ•แƒ”แƒ‘แƒก แƒงแƒ•แƒ”แƒšแƒ แƒšแƒ˜แƒœแƒขแƒ”แƒ แƒก แƒ“แƒ แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก แƒ›แƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ”แƒ‘แƒก SonarQube-แƒก,
  • แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ โ€” แƒแƒ แƒขแƒ”แƒคแƒแƒฅแƒขแƒ˜แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ แƒแƒšแƒคแƒแƒ–แƒ” (TestFlight).

แƒ“แƒ แƒ—แƒฃ แƒ“แƒ”แƒขแƒแƒšแƒ”แƒ‘แƒจแƒ˜ แƒแƒ  แƒจแƒ”แƒ“แƒ˜แƒฎแƒแƒ แƒ—, แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ”แƒ‘แƒจแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒขแƒแƒ•แƒ”แƒ‘แƒ˜แƒ—, แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒแƒ› Fastfile-แƒก:

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

แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜, แƒฉแƒ•แƒ”แƒœแƒ˜ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ Fastfile แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ แƒแƒ›แƒแƒ–แƒ แƒ–แƒ”แƒœแƒ˜, แƒ—แƒฃ แƒ’แƒแƒ•แƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ‘แƒ— แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ— แƒฎแƒ”แƒšแƒฏแƒแƒฎแƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ“แƒ แƒ“แƒ แƒ˜แƒ› แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒแƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒฉแƒแƒ•แƒแƒœแƒแƒชแƒ•แƒšแƒ”แƒ—:

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

แƒ–แƒ”แƒ›แƒแƒ— แƒ›แƒแƒงแƒ•แƒแƒœแƒ˜แƒš แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜, แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒ› แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ•แƒแƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒแƒ—: แƒ”แƒก แƒแƒ แƒ˜แƒก build-แƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ - แƒกแƒฅแƒ”แƒ›แƒ, แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ, แƒžแƒ แƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜, แƒแƒกแƒ”แƒ•แƒ” แƒ’แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ - แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜แƒก แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒก Apple ID, แƒžแƒแƒ แƒแƒšแƒ˜, แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก ID แƒ“แƒ แƒ.แƒจ. on. แƒ แƒแƒ’แƒแƒ แƒช แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ›แƒ˜แƒแƒฎแƒšแƒแƒ”แƒ‘แƒ, แƒฉแƒ•แƒ”แƒœ แƒงแƒ•แƒ”แƒšแƒ แƒแƒ› แƒ™แƒšแƒแƒ•แƒ˜แƒจแƒก แƒ•แƒ“แƒ”แƒ‘แƒ— แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ  แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒจแƒ˜ - Gymfile, Matchfile ะธ Appfile.

แƒแƒฎแƒšแƒ แƒฏแƒ”แƒœแƒ™แƒ˜แƒœแƒกแƒจแƒ˜ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒ แƒ”แƒ™แƒแƒ— แƒ›แƒแƒ™แƒšแƒ” แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒแƒ  แƒแƒ‘แƒฃแƒœแƒ“แƒแƒ•แƒแƒœแƒ”แƒ‘แƒ”แƒœ แƒฎแƒ”แƒ“แƒก แƒ“แƒ แƒแƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ‘แƒ แƒ—แƒ•แƒแƒšแƒ˜แƒ—:

# fastlane ios <lane_name>

$ fastlane ios build
$ fastlane ios test
$ fastlane ios run_sonar
$ fastlane ios deploy

แƒฐแƒฃแƒ แƒ˜, แƒ›แƒจแƒ•แƒ”แƒœแƒ˜แƒ•แƒ แƒแƒ“ แƒ•แƒแƒ แƒ—

แฒ แƒ แƒ›แƒ˜แƒ˜แƒฆแƒ”? แƒ’แƒแƒแƒกแƒฃแƒคแƒ—แƒแƒ•แƒ”แƒ— แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒงแƒแƒ•แƒ”แƒšแƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ’แƒแƒกแƒฃแƒคแƒ—แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜, แƒšแƒแƒ›แƒแƒ–แƒแƒ“ แƒ“แƒแƒšแƒแƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜ fastlane แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒจแƒ˜. แƒ’แƒแƒฎแƒแƒ แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ˜ แƒ’แƒแƒ•แƒ˜แƒฅแƒ”แƒชแƒ˜แƒ— แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒ—แƒแƒœ แƒ“แƒ แƒ•แƒ—แƒฎแƒแƒ•แƒ”แƒ—, แƒ“แƒแƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒœแƒแƒ— แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜, แƒ แƒแƒช แƒ›แƒแƒ— แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ“แƒแƒ— แƒ—แƒแƒ•แƒ˜แƒแƒœแƒ— แƒกแƒแƒชแƒแƒ•แƒ”แƒ‘แƒจแƒ˜.

แƒ›แƒแƒ’แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒ“แƒ แƒแƒฃแƒšแƒแƒ“ แƒ›แƒ˜แƒ•แƒฎแƒ•แƒ“แƒ˜แƒ—, แƒ แƒแƒ› แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ”แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ’แƒ•แƒ”แƒฅแƒ›แƒœแƒ”แƒ‘แƒ - แƒฉแƒ•แƒ”แƒœ แƒ›แƒแƒ˜แƒœแƒช แƒ’แƒ•แƒ”แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ 20 แƒแƒกแƒแƒ›แƒ‘แƒšแƒ”แƒ˜แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒแƒกแƒ” แƒ—แƒฃ แƒ˜แƒกแƒ” แƒ“แƒแƒ˜แƒฌแƒงแƒ”แƒ‘แƒ“แƒœแƒ”แƒœ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ  แƒชแƒฎแƒแƒ•แƒ แƒ”แƒ‘แƒแƒก, แƒฃแƒคแƒ แƒ แƒ แƒ—แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ แƒ›แƒแƒ—แƒ˜ แƒ แƒ”แƒ“แƒแƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜ แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒแƒ“แƒ แƒกแƒแƒชแƒแƒ•แƒ”แƒ‘แƒจแƒ˜, แƒ“แƒ แƒ˜แƒฅ แƒแƒ  แƒ’แƒ•แƒฅแƒแƒœแƒ“แƒ แƒฌแƒ•แƒ“แƒแƒ›แƒ. แƒ“แƒ แƒกแƒแƒ”แƒ แƒ—แƒแƒ“, แƒฉแƒ•แƒ”แƒœแƒ˜ แƒขแƒ™แƒ˜แƒ•แƒ˜แƒšแƒ˜แƒก แƒแƒกแƒ” แƒ’แƒแƒ“แƒแƒญแƒ แƒ แƒแƒ  แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ.

แƒ›แƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒ˜ CICD แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ”แƒ‘แƒ: แƒ”แƒ แƒ—แƒ˜ แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒ˜ แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒ›แƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก

แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ #2: แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ— แƒ”แƒ แƒ—แƒ˜ Fastfile N แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก

แƒแƒฎแƒšแƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒ’แƒแƒ“แƒแƒญแƒ แƒ แƒแƒ แƒช แƒ˜แƒกแƒ” แƒ แƒ—แƒฃแƒšแƒ˜แƒ - แƒ“แƒแƒแƒงแƒ”แƒœแƒ”แƒ— แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ›แƒแƒ“แƒ˜แƒ— แƒฌแƒแƒ•แƒ˜แƒ“แƒ”แƒ—. แƒ“แƒ˜แƒแƒฎ, แƒคแƒแƒฅแƒขแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“, แƒแƒกแƒ” แƒ›แƒแƒ’แƒ•แƒแƒ แƒ“แƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒ› แƒ›แƒแƒ›แƒ”แƒœแƒขแƒจแƒ˜, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ•แƒแƒคแƒฃแƒญแƒ”แƒ—, แƒฉแƒ•แƒ”แƒœ แƒแƒ  แƒ’แƒ•แƒฅแƒแƒœแƒ“แƒ แƒแƒ แƒช แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ”แƒ‘แƒ แƒ—แƒแƒ•แƒแƒ“ fastlane-แƒจแƒ˜, แƒแƒ แƒช Ruby-แƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช fastlane แƒแƒ แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜, แƒแƒ แƒช แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒ˜ แƒฅแƒกแƒ”แƒšแƒจแƒ˜ - แƒงแƒ•แƒ”แƒšแƒ, แƒ•แƒ˜แƒœแƒช แƒ›แƒแƒจแƒ˜แƒœ แƒฌแƒ”แƒ แƒ“แƒ fastlane-แƒ–แƒ”, แƒจแƒ”แƒ›แƒแƒ˜แƒคแƒแƒ แƒ’แƒšแƒ”แƒ‘แƒแƒ“แƒ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜แƒ— แƒ”แƒ แƒ—แƒ˜ แƒ’แƒแƒœแƒแƒชแƒฎแƒแƒ“แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ”แƒ แƒ—แƒ˜ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜.

Fastlane-แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒ•แƒ แƒ“แƒ แƒฉแƒ•แƒ”แƒœ แƒฃแƒ™แƒ•แƒ” แƒ•แƒชแƒแƒ“แƒ”แƒ— แƒ”แƒก Keychain แƒžแƒแƒ แƒแƒšแƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—:

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

แƒแƒฎแƒšแƒ, แƒ˜แƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒ“แƒแƒ’แƒ•แƒ”แƒฌแƒงแƒ แƒแƒ› แƒ™แƒšแƒแƒ•แƒ˜แƒจแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ fastlane แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒจแƒ˜, แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ”แƒ แƒ™แƒ•แƒ˜แƒ, แƒ แƒแƒ’แƒแƒ  แƒ›แƒ˜แƒ’แƒ•แƒ”แƒขแƒแƒœแƒ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ˜แƒฅ. Fastlane-แƒก แƒแƒฅแƒ•แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜ แƒแƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก: แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ dotenv-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—. แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒแƒจแƒ˜ แƒœแƒแƒ—แƒฅแƒ•แƒแƒ›แƒ˜แƒ, แƒ แƒแƒ› แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ›แƒ˜แƒ–แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ˜ fastlane แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜. .env, .env.default, .env.development.

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ™แƒ˜ แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ”แƒ—, แƒ แƒแƒ› แƒ”แƒก แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ แƒชแƒแƒขแƒ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒ’แƒ•แƒ”แƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒœแƒ. แƒ›แƒแƒ“แƒ˜แƒ—, แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒชแƒแƒ•แƒจแƒ˜ แƒ’แƒแƒœแƒ•แƒแƒ—แƒแƒ•แƒกแƒแƒ— แƒแƒ แƒ fastlane แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ›แƒ”แƒขแƒ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒแƒ› แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒคแƒแƒ˜แƒšแƒจแƒ˜. .env.appName.

แƒ—แƒ•แƒ˜แƒ—แƒแƒœ Fastfile, Appfile, Matchfile ะธ Gymfile, แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒ›แƒแƒšแƒ”แƒ— แƒ˜แƒ’แƒ˜ แƒชแƒแƒšแƒ™แƒ” แƒกแƒแƒชแƒแƒ•แƒจแƒ˜. แƒ˜แƒฅ แƒ“แƒแƒ›แƒแƒšแƒฃแƒšแƒ˜ แƒ˜แƒงแƒ แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒคแƒแƒ˜แƒšแƒ˜ แƒžแƒแƒ แƒแƒšแƒ˜แƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒ— แƒกแƒฎแƒ•แƒ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ - .env.
แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒœแƒแƒฎแƒแƒ— แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ แƒแƒฅ.

แƒ›แƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒ˜ CICD แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ”แƒ‘แƒ: แƒ”แƒ แƒ—แƒ˜ แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒ˜ แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒ›แƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก

CI-แƒ–แƒ” แƒ–แƒแƒ แƒ˜ แƒ“แƒ˜แƒ“แƒแƒ“ แƒแƒ  แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒšแƒ แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜:

# 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

แƒ”แƒก แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ แƒ“แƒแƒ แƒฉแƒ, แƒ—แƒฃแƒ›แƒชแƒ Fastlane-แƒก แƒแƒฅแƒ•แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜ Fastfile-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ— แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒแƒฅแƒชแƒ˜แƒ import_from_git, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ Fastfile-แƒ–แƒ”, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ แƒ แƒกแƒฎแƒ•แƒ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ–แƒ”. แƒ—แƒฃ แƒ’แƒกแƒฃแƒ แƒ— "แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒšแƒแƒ›แƒแƒ–แƒ˜", แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ action.

แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒœแƒแƒ™แƒ แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ Android แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ ReactNative-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒแƒ แƒ˜แƒก แƒ˜แƒ›แƒแƒ•แƒ” แƒกแƒแƒชแƒแƒ•แƒจแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒจแƒ˜ iOS, android ะธ react_native.

แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ’แƒฃแƒœแƒ“แƒก แƒกแƒฃแƒ แƒก แƒ แƒแƒ˜แƒ›แƒ” แƒแƒฎแƒแƒšแƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ, แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒจแƒ˜ แƒฉแƒแƒ˜แƒฌแƒ”แƒ แƒ”แƒ‘แƒ MR-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ— git-แƒจแƒ˜, แƒแƒฆแƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒ’แƒแƒขแƒ”แƒฎแƒ˜แƒšแƒ˜ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒœแƒแƒจแƒแƒ•แƒ”แƒ”แƒ‘แƒ˜แƒก แƒซแƒ”แƒ‘แƒœแƒ แƒ“แƒ แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒแƒฎแƒšแƒ แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒกแƒชแƒแƒ“แƒแƒ— แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒขแƒ”แƒฎแƒ•แƒ.

แƒแƒฎแƒšแƒ แƒ”แƒก แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒแƒ แƒ˜แƒก

แƒแƒ“แƒ แƒ” แƒฉแƒ•แƒ”แƒœ แƒ•แƒฎแƒแƒ แƒฏแƒแƒ•แƒ“แƒ˜แƒ— แƒงแƒ•แƒ”แƒšแƒ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜แƒก แƒจแƒ”แƒœแƒแƒ แƒฉแƒฃแƒœแƒ”แƒ‘แƒแƒก, แƒ›แƒแƒ— แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒแƒก แƒ“แƒ แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒแƒก. แƒซแƒแƒšแƒ˜แƒแƒœ แƒ˜แƒ›แƒ”แƒ“แƒ’แƒแƒชแƒ แƒฃแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒงแƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ”แƒ‘แƒจแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒจแƒ”แƒคแƒ”แƒ แƒฎแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ”แƒ‘แƒ˜ แƒ˜แƒงแƒ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ‘แƒ”แƒญแƒ“แƒ•แƒ˜แƒ—แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ แƒ—แƒ•แƒแƒšแƒงแƒฃแƒ แƒ˜แƒก แƒ“แƒ”แƒ•แƒœแƒ”แƒ‘แƒ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ แƒ—แƒฃแƒšแƒ˜ แƒ˜แƒงแƒ แƒญแƒฃแƒ แƒ•แƒ˜แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜แƒก แƒแƒฃแƒ แƒ–แƒแƒฃแƒ แƒจแƒ˜. แƒแƒฎแƒšแƒ แƒแƒกแƒ”แƒ—แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜ แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ›แƒแƒ›แƒ“แƒ”แƒ แƒ“แƒแƒงแƒ•แƒแƒœแƒ˜แƒšแƒ˜. แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒแƒ“ แƒ•แƒ แƒชแƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒงแƒ•แƒ”แƒšแƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒจแƒ˜. แƒ“แƒ 15 แƒฌแƒฃแƒ—แƒ˜ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒแƒฎแƒแƒšแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒจแƒ˜ - แƒ“แƒแƒแƒงแƒ”แƒœแƒ”แƒ— แƒจแƒแƒ‘แƒšแƒแƒœแƒ˜แƒก แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜ CI-แƒ–แƒ” แƒ“แƒ แƒ“แƒแƒแƒ›แƒแƒขแƒ”แƒ— แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜แƒก แƒกแƒแƒชแƒแƒ•แƒจแƒ˜.

แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, Fastfile for Android-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ แƒแƒฃแƒฎแƒกแƒœแƒ”แƒšแƒ˜ แƒ แƒฉแƒ”แƒ‘แƒ, แƒ—แƒฃ แƒกแƒขแƒแƒขแƒ˜แƒ แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒแƒ, แƒ’แƒแƒ’แƒ แƒซแƒ”แƒšแƒ”แƒ‘แƒแƒก แƒ“แƒแƒ•แƒฌแƒ”แƒ . แƒกแƒ˜แƒแƒ›แƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒ— แƒ•แƒœแƒแƒฎแƒแƒ• แƒ—แƒฅแƒ•แƒ”แƒœแƒก แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒ‘แƒก แƒแƒœ แƒฌแƒ˜แƒœแƒแƒ“แƒแƒ“แƒ”แƒ‘แƒ”แƒ‘แƒก โ€žแƒ แƒแƒ’แƒแƒ  แƒ›แƒแƒแƒ’แƒ•แƒแƒ แƒ”แƒ‘แƒ“แƒ˜แƒ— แƒแƒ› แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒแƒกโ€œ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ”แƒ‘แƒจแƒ˜ แƒแƒœ Telegram-แƒจแƒ˜ แƒ‘แƒแƒจแƒ˜แƒ แƒแƒ•แƒ.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ