āĻŽā§‹āĻŦāĻžāĻ‡āĻ˛ CICD āĻ…āĻ­āĻŋāĻœā§āĻžāĻ¤āĻž: āĻ…āĻ¨ā§‡āĻ• āĻŽā§‹āĻŦāĻžāĻ‡āĻ˛ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ¸ā§āĻŸāĻ˛ā§‡āĻ¨ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ

āĻŽā§‹āĻŦāĻžāĻ‡āĻ˛ CICD āĻ…āĻ­āĻŋāĻœā§āĻžāĻ¤āĻž: āĻ…āĻ¨ā§‡āĻ• āĻŽā§‹āĻŦāĻžāĻ‡āĻ˛ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ¸ā§āĻŸāĻ˛ā§‡āĻ¨ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ
āĻ†āĻŽāĻŋ āĻĢāĻžāĻ¸ā§āĻŸāĻ˛ā§‡āĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻŽā§‹āĻŦāĻžāĻ‡āĻ˛ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§āĻ°āĻŽāĻžāĻ—āĻ¤ āĻāĻ•ā§€āĻ•āĻ°āĻŖ āĻāĻŦāĻ‚ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻĨāĻž āĻŦāĻ˛āĻ¤ā§‡ āĻšāĻžāĻ‡ā§ˇ āĻ†āĻŽāĻ°āĻž āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŽā§‹āĻŦāĻžāĻ‡āĻ˛ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡ CI/CD āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻŋ, āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ†āĻŽāĻ°āĻž āĻ¸ā§‡āĻ–āĻžāĻ¨ā§‡ āĻĒā§ŒāĻāĻ›āĻ˛āĻžāĻŽ āĻāĻŦāĻ‚ āĻļā§‡āĻˇ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ•ā§€ āĻ˜āĻŸā§‡āĻ›āĻŋāĻ˛āĨ¤

āĻŸā§āĻ˛āĻŸāĻŋāĻ° āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•ā§‡ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻĒāĻ°ā§āĻ¯āĻžāĻĒā§āĻ¤ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¯āĻžāĻ° āĻļā§āĻ°ā§āĻ¤ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ…āĻ­āĻžāĻŦ āĻ›āĻŋāĻ˛, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻŋ āĻ‡āĻšā§āĻ›āĻžāĻ•ā§ƒāĻ¤āĻ­āĻžāĻŦā§‡ āĻ¸āĻ°āĻžā§āĻœāĻžāĻŽāĻŸāĻŋ āĻŦāĻŋāĻļāĻĻāĻ­āĻžāĻŦā§‡ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°āĻŦ āĻ¨āĻž, āĻ¤āĻŦā§‡ āĻ•ā§‡āĻŦāĻ˛ āĻ¤āĻ–āĻ¨āĻ‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¯āĻž āĻ›āĻŋāĻ˛ āĻ¤āĻž āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ– āĻ•āĻ°āĻŦ:

āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻĻā§āĻŸāĻŋ āĻ…āĻ‚āĻļ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ—āĻ āĻŋāĻ¤:

  • āĻ•ā§‹āĻŽā§āĻĒāĻžāĻ¨āĻŋāĻ¤ā§‡ āĻŽā§‹āĻŦāĻžāĻ‡āĻ˛ āĻ¸āĻŋāĻ†āĻ‡/āĻ¸āĻŋāĻĄāĻŋāĻ° āĻ‰āĻ¤ā§āĻĨāĻžāĻ¨ā§‡āĻ° āĻĒāĻŸāĻ­ā§‚āĻŽāĻŋ
  • āĻāĻ¨-āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ CI/CD āĻ°ā§‹āĻ˛ āĻ†āĻ‰āĻŸ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯ā§āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨

āĻĒā§āĻ°āĻĨāĻŽ āĻ…āĻ‚āĻļāĻŸāĻŋ āĻĒā§āĻ°āĻžāĻ¨ā§‹ āĻĻāĻŋāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻ°āĻ“ āĻ¨āĻ¸ā§āĻŸāĻžāĻ˛āĻœāĻŋāĻ¯āĻŧāĻž, āĻāĻŦāĻ‚ āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧāĻŸāĻŋ āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ…āĻ­āĻŋāĻœā§āĻžāĻ¤āĻž āĻ¯āĻž āĻ†āĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻœā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻāĻ¤āĻŋāĻšāĻžāĻ¸āĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻ¤āĻžāĻ‡ āĻ˜āĻŸā§‡āĻ›ā§‡

2015 āĻŦāĻ›āĻ°

āĻ†āĻŽāĻ°āĻž āĻ¸āĻŦā§‡āĻŽāĻžāĻ¤ā§āĻ° āĻŽā§‹āĻŦāĻžāĻ‡āĻ˛ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒ āĻ•āĻ°āĻž āĻļā§āĻ°ā§ āĻ•āĻ°ā§‡āĻ›āĻŋ, āĻ¤āĻžāĻ°āĻĒāĻ° āĻ†āĻŽāĻ°āĻž āĻ•ā§āĻ°āĻŽāĻžāĻ—āĻ¤ āĻ‡āĻ¨ā§āĻŸāĻŋāĻ—ā§āĻ°ā§‡āĻļāĻ¨, DevOps āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĢā§āĻ¯āĻžāĻļāĻ¨ā§‡āĻŦāĻ˛ āĻœāĻŋāĻ¨āĻŋāĻ¸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻŋāĻ›ā§āĻ‡ āĻœāĻžāĻ¨āĻ¤āĻžāĻŽ āĻ¨āĻžāĨ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ†āĻĒāĻĄā§‡āĻŸ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ° āĻ¨āĻŋāĻœā§‡āĻ‡ āĻ¤āĻžāĻ° āĻŽā§‡āĻļāĻŋāĻ¨ āĻĨā§‡āĻ•ā§‡ āĻ°ā§‹āĻ˛ āĻ†āĻ‰āĻŸ āĻ•āĻ°ā§‡āĻ›āĻŋāĻ˛ā§‡āĻ¨āĨ¤ āĻāĻŦāĻ‚ āĻ¯āĻĻāĻŋ āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ°āĻ¯āĻŧā§‡āĻĄā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻŸāĻŋ āĻŦā§‡āĻļ āĻ¸āĻšāĻœ - āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤, āĻ¸ā§āĻŦāĻžāĻ•ā§āĻˇāĻ°āĻŋāĻ¤ .apk āĻāĻŦāĻ‚ āĻāĻŸāĻŋ Google āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ° āĻ•āĻ¨āĻ¸ā§‹āĻ˛ā§‡ āĻ†āĻĒāĻ˛ā§‹āĻĄ āĻ•āĻ°ā§‡, āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ iOS-āĻāĻ° āĻœāĻ¨ā§āĻ¯ Xcode-āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¤ā§ŽāĻ•āĻžāĻ˛ā§€āĻ¨ āĻĄāĻŋāĻ¸ā§āĻŸā§āĻ°āĻŋāĻŦāĻŋāĻ‰āĻļāĻ¨ āĻŸā§āĻ˛āĻŸāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤ āĻ¸āĻ¨ā§āĻ§ā§āĻ¯āĻžāĻ¯āĻŧ āĻĢā§‡āĻ˛ā§‡ āĻĻā§‡āĻ¯āĻŧ - āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖāĻžāĻ—āĻžāĻ°āĻŸāĻŋ āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻšā§‡āĻˇā§āĻŸāĻž āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ‡ āĻ¤ā§āĻ°ā§āĻŸāĻŋāĻ¤ā§‡ āĻļā§‡āĻˇ āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ†āĻŦāĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧāĨ¤ āĻĻā§‡āĻ–āĻž āĻ—ā§‡āĻ˛ āĻ¯ā§‡ āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ‰āĻ¨ā§āĻ¨āĻ¤ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€ āĻŽāĻžāĻ¸ā§‡ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŦāĻžāĻ° āĻ•ā§‹āĻĄ āĻ˛ā§‡āĻ–ā§‡āĻ¨ āĻ¨āĻž, āĻŦāĻ°āĻ‚ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋ āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°ā§‡āĻ¨āĨ¤

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, āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ•ā§€āĻ—ā§āĻ˛āĻŋāĻ° āĻ¨āĻžāĻŽāĻ•āĻ°āĻŖ āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ°āĨ¤

āĻāĻ‡ āĻ¸āĻŽāĻ¯āĻŧ, āĻœāĻŋāĻŽ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ xcpretty āĻĢāĻ°ā§āĻŽā§āĻ¯āĻžāĻŸāĻžāĻ°āĻ•ā§‡ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ, āĻŦāĻŋāĻ˛ā§āĻĄ āĻ˛āĻ—āĻ—ā§āĻ˛āĻŋ āĻ†āĻ°āĻ“ āĻŦā§‡āĻļāĻŋ āĻ¸ā§āĻ¸ā§āĻĒāĻˇā§āĻŸ āĻšāĻ¯āĻŧā§‡ āĻ‰āĻ ā§‡āĻ›ā§‡āĨ¤ āĻāĻŸāĻŋ āĻ­āĻžāĻ™āĻž āĻ¸āĻŽāĻžāĻŦā§‡āĻļāĻ—ā§āĻ˛āĻŋ āĻ āĻŋāĻ• āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ¯āĻŧ āĻŦāĻžāĻāĻšāĻžāĻ¤ā§‡ āĻļā§āĻ°ā§ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ•āĻ–āĻ¨āĻ“ āĻ•āĻ–āĻ¨āĻ“ āĻ°āĻŋāĻ˛āĻŋāĻœ āĻĻāĻ˛ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻœā§‡āĻ°āĻžāĻ‡ āĻāĻŸāĻŋ āĻŦā§‡āĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻĻā§āĻ°ā§āĻ­āĻžāĻ—ā§āĻ¯āĻŦāĻļāĻ¤, āĻ¸āĻŽāĻžāĻŦā§‡āĻļ āĻ—āĻ¤āĻŋ āĻĒāĻ°āĻŋāĻŽāĻžāĻĒ xcodebuild и gym āĻ†āĻŽāĻ°āĻž āĻāĻŸāĻŋ āĻ•āĻ°āĻŋāĻ¨āĻŋ, āĻ¤āĻŦā§‡ āĻ†āĻŽāĻ°āĻž āĻĄāĻ•ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨ā§‡ āĻŦāĻŋāĻļā§āĻŦāĻžāĻ¸ āĻ•āĻ°āĻŦ - 30% āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ—āĻ¤āĻŋāĨ¤

āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻ• āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž

2018 āĻ¸āĻžāĻ˛ āĻāĻŦāĻ‚ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨

2018 āĻ¸āĻžāĻ˛ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡, āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻāĻŦāĻ‚ āĻ°ā§‹āĻ˛ āĻ†āĻ‰āĻŸ āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖāĻ°ā§‚āĻĒā§‡ āĻœā§‡āĻ¨āĻ•āĻŋāĻ¨ā§āĻ¸ā§‡ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛, āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€āĻ°āĻž āĻ¤āĻžāĻĻā§‡āĻ° āĻŽā§‡āĻļāĻŋāĻ¨ āĻĨā§‡āĻ•ā§‡ āĻŽā§āĻ•ā§āĻ¤āĻŋ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°ā§‡ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ āĻāĻŦāĻ‚ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ°āĻŋāĻ˛āĻŋāĻœ āĻŸāĻŋāĻŽā§‡āĻ° āĻŽā§āĻ•ā§āĻ¤āĻŋāĻ° āĻ…āĻ§āĻŋāĻ•āĻžāĻ° āĻ›āĻŋāĻ˛āĨ¤

āĻ†āĻŽāĻ°āĻž āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻāĻŦāĻ‚ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŸāĻŋāĻ• āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻ¤ā§‡ āĻšā§‡āĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ āĻāĻŦāĻ‚ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻ—ā§āĻ˛āĻŋ āĻŦā§‡āĻĄāĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻŦā§‡āĻĄāĻŧā§‡āĻ›ā§‡āĨ¤ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻŦā§ƒāĻĻā§āĻ§āĻŋ āĻāĻŦāĻ‚ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ¸ā§‡āĻ‡ āĻ¸āĻŽāĻ¯āĻŧā§‡, āĻĒā§āĻ°āĻžāĻ¯āĻŧ 10āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ›āĻŋāĻ˛ā§ˇ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĻā§āĻŸāĻŋ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ āĻ†āĻ›ā§‡ āĻ¤āĻž āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°ā§‡, āĻāĻŸāĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧ 20āĻŸāĻŋ "āĻœā§€āĻŦāĻŋāĻ¤" āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§ˇ

āĻĒā§āĻ°āĻ¤āĻŋāĻŦāĻžāĻ° āĻ†āĻŽāĻ°āĻž āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĒāĻĻāĻ•ā§āĻˇā§‡āĻĒ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻšā§‡āĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻļā§‡āĻ˛ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡ āĻŸā§āĻ•āĻ°ā§‹āĻ—ā§āĻ˛āĻŋ āĻ•āĻĒāĻŋ-āĻĒā§‡āĻ¸ā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻ†āĻŽāĻ°āĻž āĻ†āĻ°āĻ“ āĻ¯āĻ¤ā§āĻ¨ āĻ¸āĻšāĻ•āĻžāĻ°ā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻ¤āĻžāĻŽ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ‡ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ āĻŸāĻžāĻ‡āĻĒā§‹āĻ¤ā§‡ āĻļā§‡āĻˇ āĻšāĻ¯āĻŧ, āĻ¯āĻž āĻ°āĻŋāĻ˛āĻŋāĻœ āĻĻāĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻ—ā§āĻ˛āĻŋ āĻ āĻŋāĻ• āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻ¨ā§āĻ§ā§āĻ¯āĻžāĻ¯āĻŧ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ•ā§‹āĻ¨ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻ˛ā§‹āĻ•āĻŸāĻŋ āĻāĻ‡ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāĻŸāĻŋ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ†āĻ¸āĻ˛ā§‡ āĻ•ā§€ āĻ•āĻ°ā§‡ āĻ¤āĻž āĻ–ā§āĻāĻœā§‡ āĻŦā§‡āĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯āĨ¤ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ­āĻžāĻŦā§‡, āĻāĻŸāĻŋ āĻŦāĻ˛āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¨āĻž āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻžāĻŦā§‡āĻļā§‡āĻ° āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻ—ā§āĻ˛āĻŋ āĻ…āĻ¨ā§āĻ¤āĻ¤ āĻ•āĻŋāĻ›ā§āĻŸāĻž āĻ…āĻ¨ā§āĻ°ā§‚āĻĒ āĻ›āĻŋāĻ˛āĨ¤ āĻ¯āĻĻāĻŋāĻ“ āĻ¤āĻžāĻ°āĻž āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻāĻ•āĻ‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĻ›ā§‡āĨ¤

āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻļā§āĻ°ā§ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻāĻ‡ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ "āĻ¨āĻ¤ā§āĻ¨" āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ¨ āĻ•āĻ°āĻ¤ā§‡, āĻāĻŸāĻŋāĻ•ā§‡ āĻĄāĻŋāĻŦāĻžāĻ— āĻ•āĻ°āĻ¤ā§‡ āĻāĻŦāĻ‚ "āĻšā§āĻ¯āĻžāĻ, āĻāĻŸāĻŋ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡" āĻŦāĻ˛āĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻĻāĻŋāĻ¨ āĻŦā§āĻ¯āĻ¯āĻŧ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ā§ˇ

2018 āĻ¸āĻžāĻ˛ā§‡āĻ° āĻ—ā§āĻ°ā§€āĻˇā§āĻŽā§‡, āĻ†āĻŽāĻ°āĻž āĻ†āĻŦāĻžāĻ°āĻ“ āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨āĻļā§€āĻ˛ āĻĢāĻžāĻ¸ā§āĻŸāĻ˛ā§‡āĻ¨ā§‡āĻ° āĻĻāĻŋāĻ•ā§‡ āĻ¤āĻžāĻ•āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĻžāĻŽāĨ¤

āĻŸāĻžāĻ¸ā§āĻ• #1: āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡āĻ° āĻ§āĻžāĻĒāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¸āĻ‚āĻ•ā§āĻˇāĻŋāĻĒā§āĻ¤ āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻĢāĻžāĻ¸ā§āĻŸāĻĢāĻžāĻ‡āĻ˛ā§‡ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻ˛āĻŋāĻ–ā§āĻ¨ā§ˇ

āĻ¯āĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž āĻļā§āĻ°ā§ āĻ•āĻ°āĻŋ, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻ—ā§āĻ˛āĻŋ āĻœā§‡āĻ¨āĻ•āĻŋāĻ¨ā§āĻ¸ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻļā§‡āĻ˛ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ§āĻžāĻĒ āĻāĻŦāĻ‚ āĻ•ā§āĻ°āĻžāĻš āĻ¸āĻŽāĻ¨ā§āĻŦāĻŋāĻ¤ āĻāĻ•āĻŸāĻŋ āĻĢā§āĻŸāĻ•ā§āĻ˛āĻĨā§‡āĻ° āĻŽāĻ¤ā§‹ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧāĨ¤ āĻ†āĻŽāĻ°āĻž āĻāĻ–āĻ¨āĻ“ āĻĒāĻžāĻ‡āĻĒāĻ˛āĻžāĻ‡āĻ¨ āĻāĻŦāĻ‚ āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧ āĻ…āĻ¨ā§āĻ¸āĻžāĻ°ā§‡ āĻŦāĻŋāĻ­āĻžāĻœāĻ¨ā§‡ āĻ¸ā§āĻ¯ā§āĻ‡āĻš āĻ•āĻ°āĻŋāĻ¨āĻŋāĨ¤

āĻ†āĻŽāĻ°āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻ¯āĻž āĻ†āĻ›ā§‡ āĻ¤āĻž āĻĻā§‡āĻ–ā§‡āĻ›āĻŋ āĻāĻŦāĻ‚ āĻ†āĻŽāĻžāĻĻā§‡āĻ° CI/CD āĻāĻ° āĻŦāĻ°ā§āĻŖāĻ¨āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻžāĻ¨āĻžāĻ¨āĻ¸āĻ‡ 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 āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ¸ā§‡āĻŽā§āĻŦāĻ˛āĻŋ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻĨāĻžāĻ•āĻŦā§‡ āĻ¯ā§‡āĻ—ā§āĻ˛āĻŋ āĻ•ā§‹āĻ¨āĻ“ āĻ¨āĻž āĻ•ā§‹āĻ¨āĻ“āĻ­āĻžāĻŦā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻœā§€āĻŦāĻ¨āĻ¯āĻžāĻĒāĻ¨ āĻļā§āĻ°ā§ āĻ•āĻ°āĻŦā§‡, āĻ¤āĻžāĻĻā§‡āĻ° āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨āĻž āĻ•āĻ°āĻž āĻ†āĻ°āĻ“ āĻ•āĻ āĻŋāĻ¨ āĻšāĻŦā§‡, āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻ—ā§āĻ˛āĻŋ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡ āĻšāĻ˛ā§‡ āĻ¯āĻžāĻŦā§‡, āĻāĻŦāĻ‚ āĻ¸ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻŦā§‡āĻļāĻžāĻ§āĻŋāĻ•āĻžāĻ° āĻ›āĻŋāĻ˛ āĻ¨āĻžāĨ¤ āĻāĻŦāĻ‚, āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ­āĻžāĻŦā§‡, āĻāĻ‡āĻ­āĻžāĻŦā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŦā§āĻ¯āĻĨāĻž āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻšāĻŦā§‡ āĻ¨āĻžāĨ¤

āĻŽā§‹āĻŦāĻžāĻ‡āĻ˛ CICD āĻ…āĻ­āĻŋāĻœā§āĻžāĻ¤āĻž: āĻ…āĻ¨ā§‡āĻ• āĻŽā§‹āĻŦāĻžāĻ‡āĻ˛ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ¸ā§āĻŸāĻ˛ā§‡āĻ¨ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ

āĻŸāĻžāĻ¸ā§āĻ• #2: N āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻāĻ•āĻ• āĻĢāĻžāĻ¸ā§āĻŸāĻĢāĻžāĻ‡āĻ˛ āĻĒāĻžāĻ¨

āĻāĻ–āĻ¨ āĻŽāĻ¨ā§‡ āĻšāĻšā§āĻ›ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻŸāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻž āĻāĻ¤ āĻ•āĻ āĻŋāĻ¨ āĻ¨āĻ¯āĻŧ - āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§āĻ¨, āĻāĻŦāĻ‚ āĻšāĻ˛ā§āĻ¨āĨ¤ āĻšā§āĻ¯āĻžāĻ, āĻ†āĻ¸āĻ˛ā§‡, āĻāĻ‡āĻ­āĻžāĻŦā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻŸāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¯ā§‡ āĻŽā§āĻšā§āĻ°ā§āĻ¤ā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻŸāĻŋāĻ•ā§‡ āĻ¸ā§āĻ•ā§āĻ°ā§ āĻ•āĻ°āĻ›āĻŋāĻ˛āĻžāĻŽ, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻĢāĻžāĻ¸ā§āĻŸāĻ˛ā§‡āĻ¨ā§‡ āĻĻāĻ•ā§āĻˇāĻ¤āĻž āĻ›āĻŋāĻ˛ āĻ¨āĻž, āĻ¨āĻž āĻ°ā§āĻŦāĻŋāĻ¤ā§‡, āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻĢāĻžāĻ¸ā§āĻŸāĻ˛ā§‡āĻ¨ āĻ˛ā§‡āĻ–āĻž āĻ†āĻ›ā§‡, āĻŦāĻž āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•ā§‡ āĻĻāĻ°āĻ•āĻžāĻ°ā§€ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ“ āĻ›āĻŋāĻ˛ āĻ¨āĻž - āĻ¯āĻžāĻ°āĻž āĻĢāĻžāĻ¸ā§āĻŸāĻ˛ā§‡āĻ¨ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ˛āĻŋāĻ–ā§‡āĻ›āĻŋāĻ˛ā§‡āĻ¨ āĻ¤āĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¤ā§āĻ¯ā§‡āĻ•ā§‡āĻ°āĻ‡ āĻāĻ•āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¸ā§€āĻŽāĻžāĻŦāĻĻā§āĻ§ āĻ›āĻŋāĻ˛ āĻāĻ•āĻœāĻ¨ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€āĻ° āĻœāĻ¨ā§āĻ¯āĨ¤

āĻĢāĻžāĻ¸ā§āĻŸāĻ˛ā§‡āĻ¨ āĻāĻ¨āĻ­āĻžāĻ¯āĻŧāĻ°āĻ¨āĻŽā§‡āĻ¨ā§āĻŸ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛āĻ—ā§āĻ˛āĻŋ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻāĻŦāĻ‚ āĻ†āĻŽāĻ°āĻž āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻ•ā§€āĻšā§‡āĻ¨ āĻĒāĻžāĻ¸āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§‡ āĻāĻŸāĻŋ āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§‡āĻ›āĻŋ:

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

āĻāĻ–āĻ¨, āĻĢāĻžāĻ¸ā§āĻŸāĻ˛ā§‡āĻ¨ āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻāĻ‡ āĻ•ā§€āĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻļā§āĻ°ā§ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¤āĻž āĻ–ā§āĻāĻœā§‡ āĻŦā§‡āĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻĢāĻžāĻ¸ā§āĻŸāĻ˛ā§‡āĻ¨ āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ†āĻ›ā§‡: dotenv āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡. āĻĄāĻ•ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨ āĻŦāĻ˛āĻ›ā§‡ āĻ¯ā§‡ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ‰āĻĻā§āĻĻā§‡āĻļā§āĻ¯ā§‡ āĻ•ā§€ āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻž āĻ†āĻĒāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻšāĻ˛ā§‡, āĻĢāĻžāĻ¸ā§āĻŸāĻ˛ā§‡āĻ¨ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋāĻ¤ā§‡ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĢāĻžāĻ‡āĻ˛ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨ .env, .env.default, .env.development.

āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ° āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸā§ āĻ­āĻŋāĻ¨ā§āĻ¨āĻ­āĻžāĻŦā§‡ āĻāĻ‡ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›ā§‡. āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ°āĻĻā§‡āĻ° āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡ āĻĢāĻžāĻ¸ā§āĻŸāĻ˛ā§‡āĻ¨ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻāĻŦāĻ‚ āĻāĻ° āĻŽā§‡āĻŸāĻž āĻ¤āĻĨā§āĻ¯ āĻ¨āĻ¯āĻŧ, āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋāĻ¤ā§‡ āĻāĻ‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋāĻ° āĻ…āĻ¨āĻ¨ā§āĻ¯ āĻ•ā§€āĻ—ā§āĻ˛āĻŋ āĻ°āĻžāĻ–ā§āĻ¨ .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

āĻ†āĻĒāĻžāĻ¤āĻ¤ āĻāĻ‡ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĻŸāĻŋ āĻ›ā§‡āĻĄāĻŧā§‡ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ, āĻ¯āĻĻāĻŋāĻ“ āĻĢāĻžāĻ¸ā§āĻŸāĻ˛ā§‡āĻ¨ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻĢāĻžāĻ¸ā§āĻŸāĻĢāĻžāĻ‡āĻ˛ āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ•āĻ°ā§āĻŽ import_from_git, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŸāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĢāĻžāĻ¸ā§āĻŸāĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨āĻ¯āĻŧāĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ "āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ‡ āĻ¸ā§āĻ¨ā§āĻĻāĻ°" āĻšāĻžāĻ¨ āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻœā§‡āĻ° āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ action.

āĻāĻ•āĻŸāĻŋ āĻ…āĻ¨ā§āĻ°ā§‚āĻĒ āĻ¸ā§‡āĻŸ āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ°āĻ¯āĻŧā§‡āĻĄ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻāĻŦāĻ‚ ReactNative āĻœāĻ¨ā§āĻ¯ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛, āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋ āĻāĻ•āĻ‡ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻļāĻžāĻ–āĻžāĻ¯āĻŧ iOS, android и react_native.

āĻ¯āĻ–āĻ¨ āĻ°āĻŋāĻ˛āĻŋāĻœ āĻŸāĻŋāĻŽ āĻ•āĻŋāĻ›ā§ āĻ¨āĻ¤ā§āĻ¨ āĻ§āĻžāĻĒ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ¯āĻŧ, āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ MR āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ—āĻŋāĻŸā§‡ āĻ°ā§‡āĻ•āĻ°ā§āĻĄ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ­āĻžāĻ™āĻž āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡āĻ° āĻ…āĻĒāĻ°āĻžāĻ§ā§€āĻĻā§‡āĻ° āĻ–ā§āĻāĻœā§‡ āĻŦā§‡āĻ° āĻ•āĻ°āĻžāĻ° āĻ†āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¨ā§‡āĻ‡, āĻāĻŦāĻ‚ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ­āĻžāĻŦā§‡, āĻāĻ–āĻ¨ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻāĻŸāĻŋ āĻ­āĻžāĻ™āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤

āĻāĻ–āĻ¨ āĻāĻŸāĻž āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤

āĻĒā§‚āĻ°ā§āĻŦā§‡, āĻ†āĻŽāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ°āĻ•ā§āĻˇāĻŖāĻžāĻŦā§‡āĻ•ā§āĻˇāĻŖ, āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻ†āĻĒāĻĄā§‡āĻŸā§‡āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻ°āĻŋāĻŖāĻ¤āĻŋ āĻ āĻŋāĻ• āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻŽāĻ¯āĻŧ āĻŦā§āĻ¯āĻ¯āĻŧ āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤ āĻāĻŸāĻŋ āĻ–ā§āĻŦāĻ‡ āĻšāĻ¤āĻžāĻļāĻžāĻœāĻ¨āĻ• āĻ›āĻŋāĻ˛ āĻ¯āĻ–āĻ¨ āĻ°āĻŋāĻ˛āĻŋāĻœā§‡ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻāĻŦāĻ‚ āĻĄāĻžāĻ‰āĻ¨āĻŸāĻžāĻ‡āĻŽā§‡āĻ° āĻ•āĻžāĻ°āĻŖāĻ—ā§āĻ˛āĻŋ āĻ›āĻŋāĻ˛ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻŸāĻžāĻ‡āĻĒā§‹ āĻ¯āĻž āĻļā§‡āĻ˛ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡āĻ° āĻ—ā§‹āĻ˛āĻŽāĻžāĻ˛ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻŸā§āĻ°ā§āĻ¯āĻžāĻ• āĻ°āĻžāĻ–āĻž āĻāĻ¤ āĻ•āĻ āĻŋāĻ¨ āĻ›āĻŋāĻ˛āĨ¤ āĻāĻ–āĻ¨ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ°ā§āĻŦāĻ¨āĻŋāĻŽā§āĻ¨ āĻšā§āĻ°āĻžāĻ¸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ. āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ āĻāĻ•āĻŦāĻžāĻ°ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ°ā§‹āĻ˛ āĻ†āĻ‰āĻŸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§ˇ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻŸāĻŋāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ†āĻ¨āĻ¤ā§‡ 15 āĻŽāĻŋāĻ¨āĻŋāĻŸ āĻ¸āĻŽāĻ¯āĻŧ āĻ˛āĻžāĻ—ā§‡ - CI-āĻ āĻāĻ•āĻŸāĻŋ āĻŸā§‡āĻŽāĻĒā§āĻ˛ā§‡āĻŸ āĻĒāĻžāĻ‡āĻĒāĻ˛āĻžāĻ‡āĻ¨ āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€āĻ° āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡ āĻ•ā§€āĻ—ā§āĻ˛āĻŋ āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§āĻ¨ā§ˇ

āĻŽāĻ¨ā§‡ āĻšāĻšā§āĻ›ā§‡ āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ°āĻ¯āĻŧā§‡āĻĄā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĢāĻžāĻ¸ā§āĻŸāĻĢāĻžāĻ‡āĻ˛ āĻāĻŦāĻ‚ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻ¸ā§āĻŦāĻžāĻ•ā§āĻˇāĻ° āĻ¸āĻš āĻŦāĻŋāĻ¨ā§āĻĻā§āĻŸāĻŋ āĻŦā§āĻ¯āĻžāĻ–ā§āĻ¯āĻžāĻ¤ā§€āĻ¤ āĻ°āĻ¯āĻŧā§‡ āĻ—ā§‡āĻ›ā§‡; āĻ¯āĻĻāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻšāĻ¯āĻŧ āĻ¤āĻŦā§‡ āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻ§āĻžāĻ°āĻžāĻŦāĻžāĻšāĻŋāĻ•āĻ¤āĻž āĻ˛āĻŋāĻ–āĻŦāĨ¤ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ā§‡ āĻŦāĻž āĻŸā§‡āĻ˛āĻŋāĻ—ā§āĻ°āĻžāĻŽā§‡ "āĻ†āĻĒāĻ¨āĻŋ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻāĻ‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻŦā§‡āĻ¨" āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻļā§āĻ¨ āĻŦāĻž āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļāĻ—ā§āĻ˛āĻŋ āĻĻā§‡āĻ–ā§‡ āĻ†āĻŽāĻŋ āĻ–ā§āĻļāĻŋ āĻšāĻŦ āĻŦāĻžāĻļāĻ•āĻŋāĻ°ā§‹āĻ­āĻž.

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨