āĻāĻŽāĻŋ āĻĢāĻžāĻ¸ā§āĻāĻ˛ā§āĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻŽā§āĻŦāĻžāĻāĻ˛ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ°āĻŽāĻžāĻāĻ¤ āĻāĻā§āĻāĻ°āĻŖ āĻāĻŦāĻ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻĨāĻž āĻŦāĻ˛āĻ¤ā§ āĻāĻžāĻā§ˇ āĻāĻŽāĻ°āĻž āĻā§āĻāĻžāĻŦā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŽā§āĻŦāĻžāĻāĻ˛ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§ CI/CD āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻŋ, āĻā§āĻāĻžāĻŦā§ āĻāĻŽāĻ°āĻž āĻ¸ā§āĻāĻžāĻ¨ā§ āĻĒā§āĻāĻāĻ˛āĻžāĻŽ āĻāĻŦāĻ āĻļā§āĻˇ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻā§ āĻāĻā§āĻāĻŋāĻ˛āĨ¤
āĻā§āĻ˛āĻāĻŋāĻ° āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻā§ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻĒāĻ°ā§āĻ¯āĻžāĻĒā§āĻ¤ āĻāĻĒāĻžāĻĻāĻžāĻ¨ āĻ°āĻ¯āĻŧā§āĻā§, āĻ¯āĻžāĻ° āĻļā§āĻ°ā§āĻ¤ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻ āĻāĻžāĻŦ āĻāĻŋāĻ˛, āĻ¤āĻžāĻ āĻāĻŽāĻŋ āĻāĻā§āĻāĻžāĻā§āĻ¤āĻāĻžāĻŦā§ āĻ¸āĻ°āĻā§āĻāĻžāĻŽāĻāĻŋ āĻŦāĻŋāĻļāĻĻāĻāĻžāĻŦā§ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻŦ āĻ¨āĻž, āĻ¤āĻŦā§ āĻā§āĻŦāĻ˛ āĻ¤āĻāĻ¨āĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¯āĻž āĻāĻŋāĻ˛ āĻ¤āĻž āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°āĻŦ:
āĻ āĻĢāĻŋāĻ¸āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻĢāĻžāĻ¸ā§āĻāĻ˛ā§āĻ¨ āĻĄāĻā§āĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻā§āĻŽā§āĻĒāĻžāĻ¨āĻŋ āĻĨā§āĻā§ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻāĻŽāĻ°āĻž āĻĢāĻžāĻ¸ā§āĻāĻ˛ā§āĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ iOS āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻāĻ°āĻŋ
āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻĻā§āĻāĻŋ āĻ āĻāĻļ āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻ āĻŋāĻ¤:
- āĻā§āĻŽā§āĻĒāĻžāĻ¨āĻŋāĻ¤ā§ āĻŽā§āĻŦāĻžāĻāĻ˛ āĻ¸āĻŋāĻāĻ/āĻ¸āĻŋāĻĄāĻŋāĻ° āĻāĻ¤ā§āĻĨāĻžāĻ¨ā§āĻ° āĻĒāĻāĻā§āĻŽāĻŋ
- āĻāĻ¨-āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ 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 āĻāĻŋ āĻ ā§āĻ¯āĻžāĻ¸ā§āĻŽā§āĻŦāĻ˛āĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻĨāĻžāĻāĻŦā§ āĻ¯ā§āĻā§āĻ˛āĻŋ āĻā§āĻ¨āĻ āĻ¨āĻž āĻā§āĻ¨āĻāĻāĻžāĻŦā§ āĻ¤āĻžāĻĻā§āĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻā§āĻŦāĻ¨āĻ¯āĻžāĻĒāĻ¨ āĻļā§āĻ°ā§ āĻāĻ°āĻŦā§, āĻ¤āĻžāĻĻā§āĻ° āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨āĻž āĻāĻ°āĻž āĻāĻ°āĻ āĻāĻ āĻŋāĻ¨ āĻšāĻŦā§, āĻ¯ā§āĻšā§āĻ¤ā§ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻā§āĻ˛āĻŋ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§ āĻāĻ˛ā§ āĻ¯āĻžāĻŦā§, āĻāĻŦāĻ āĻ¸ā§āĻāĻžāĻ¨ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻŦā§āĻļāĻžāĻ§āĻŋāĻāĻžāĻ° āĻāĻŋāĻ˛ āĻ¨āĻžāĨ¤ āĻāĻŦāĻ, āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻāĻžāĻŦā§, āĻāĻāĻāĻžāĻŦā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻŦā§āĻ¯āĻĨāĻž āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻž āĻ¸āĻŽā§āĻāĻŦ āĻšāĻŦā§ āĻ¨āĻžāĨ¤
āĻāĻžāĻ¸ā§āĻ #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
āĻāĻāĻ¨, āĻĢāĻžāĻ¸ā§āĻāĻ˛ā§āĻ¨ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻ āĻā§āĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻļā§āĻ°ā§ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸ā§āĻāĻžāĻ¨ā§ āĻā§āĻāĻžāĻŦā§ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¤āĻž āĻā§āĻāĻā§ āĻŦā§āĻ° āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤ āĻĢāĻžāĻ¸ā§āĻāĻ˛ā§āĻ¨ āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻā§: .env
, .env.default
, .env.development
.
āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŽāĻ°āĻž āĻāĻāĻā§ āĻāĻŋāĻ¨ā§āĻ¨āĻāĻžāĻŦā§ āĻāĻ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻā§. āĻĄā§āĻā§āĻ˛āĻĒāĻžāĻ°āĻĻā§āĻ° āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§ āĻĢāĻžāĻ¸ā§āĻāĻ˛ā§āĻ¨ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻŦāĻ āĻāĻ° āĻŽā§āĻāĻž āĻ¤āĻĨā§āĻ¯ āĻ¨āĻ¯āĻŧ, āĻĢāĻžāĻāĻ˛āĻāĻŋāĻ¤ā§ āĻāĻ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻāĻŋāĻ° āĻ
āĻ¨āĻ¨ā§āĻ¯ āĻā§āĻā§āĻ˛āĻŋ āĻ°āĻžāĻā§āĻ¨ .env.appName
.
āĻ¨āĻŋāĻā§āĻĻā§āĻ° Fastfile
, Appfile
, Matchfile
и Gymfile
, āĻāĻŽāĻ°āĻž āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§ āĻ˛ā§āĻāĻŋāĻ¯āĻŧā§ āĻ°ā§āĻā§āĻāĻŋāĨ¤ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻ° āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻā§ āĻ¸āĻš āĻāĻāĻāĻŋ āĻ
āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻĢāĻžāĻāĻ˛ āĻ¸ā§āĻāĻžāĻ¨ā§ āĻ˛ā§āĻāĻžāĻ¨ā§ āĻāĻŋāĻ˛ - .env
.
āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
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