เบเปเบฒเบเบฐเปเบเบปเปเบฒเบขเบฒเบเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบเบฒเบเปเบเบทเปเบญเบกเปเบเบเบขเปเบฒเบเบเปเปเปเบเบทเปเบญเบเปเบฅเบฐเบเบฒเบเบเบฑเบเบชเบปเปเบเบชเปเบฒเบฅเบฑเบเปเบญเบฑเบเบฏเบกเบทเบเบทเปเบเบเปเบเป fastlane. เบเบงเบเปเบฎเบปเบฒเบเบฐเบเบดเบเบฑเบ CI/CD เปเบเบเบธเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบกเบทเบเบทเปเบเบงเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบเบฎเบญเบเบเปเบญเบเบเบฑเปเบเปเบเปเปเบเบงเปเบ เปเบฅเบฐเบชเบดเปเบเบเบตเปเปเบเบตเบเบเบถเปเบเปเบเบเบตเปเบชเบธเบ.
เบกเบตเบญเบธเบเบฐเบเบญเบเบเบฒเบเบเบฝเบเบเปเปเบเปเบเบทเบญเบเปเบฒเบเปเบเปเบเบทเปเบญเบเบกเบท, เปเบเบดเปเบเบเบงเบเปเบฎเบปเบฒเบเบฒเบเปเบเบเบญเบเปเบฅเบตเปเบกเบเบปเปเบ, เบชเบฐเบเบฑเปเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเบเปเปเบญเบฐเบเบดเบเบฒเบเปเบเบทเปเบญเบเบกเบทเบขเปเบฒเบเบฅเบฐเบญเบฝเบ, เปเบเปเบเบฐเบญเปเบฒเบเปเบเบดเบเบชเบดเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบกเบตเปเบเปเบงเบฅเบฒเบเบฑเปเบเปเบเบปเปเบฒเบเบฑเปเบ:
เปเบญโเบเบฐโเบชเบฒเบ fastlane เบขเปเบฒเบโเปเบเบฑเบโเบเบฒเบโเบเบฒเบโ เบเบปเบงเบขเปเบฒเบเบเบฒเบเบเปเบฅเบดเบชเบฑเบเบญเบทเปเบ เบเบงเบเปเบฎเบปเบฒเบญเบฑเบเบเบฐเปเบเบกเบฑเบเบเบฒเบเบเบฐเบเบญเบเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ iOS เปเบเบเปเบเป Fastlane
เบเบปเบโเบเบงเบฒเบกโเบเบฐโเบเบญเบโเบเปเบงเบโเบชเบญเบโเบเบฒเบโเบชเปเบงเบโ:
- เบเบฐเบซเบงเบฑเบเบเบงเบฒเบกเปเบเบฑเบเบกเบฒเบเบญเบ CI/CD เบกเบทเบเบทเปเบเบเปเบฅเบดเบชเบฑเบ
- เบเบฒเบเปเบเปเปเบเบเปเบฒเบเบงเบดเบเบฒเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบตเบเบเบปเบง CI/CD เบชเปเบฒเบฅเบฑเบ N-applications
เบเบฒเบเบชเปเบงเบเบเปเบฒเบญเบดเบเปเบกเปเบ nostalgia เบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบเบกเบทเปเปเบเบปเปเบฒ, เปเบฅเบฐเบเบตเบชเบญเบเปเบกเปเบเบเบฐเบชเบปเบเบเบฒเบเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเปเบเบฑเบเบเบปเบงเบเปเบฒเบเปเบญเบ.
เบเบตเปเปเบกเปเบเบงเบดเบเบตเบเบตเปเบกเบฑเบเปเบเบตเบเบเบถเปเบเปเบเบเบฐเบซเบงเบฑเบเบชเบฒเบ
2015 เบเบต
เบเบงเบเปเบฎเบปเบฒเบซเบฒเบเปเปเปเบฅเบตเปเบกเบเบฑเบเบเบฐเบเบฒเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบกเบทเบเบท, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบเปเปเบฎเบนเปเบซเบเบฑเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเปเบเบทเปเบญเบกเปเบเบเบขเปเบฒเบเบเปเปเปเบเบทเปเบญเบ, เบเปเบฝเบงเบเบฑเบ DevOps เปเบฅเบฐเบชเบดเปเบเบเบญเบเบเบปเบเบญเบฑเบเปเบเบ: เบญเบทเปเบเป. เบเบฒเบเบญเบฑเบเปเบเบเปเบเปเบฅเบฐเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบเปเบเบทเบ rolled เบญเบญเบเปเบเบเบเบนเปเบเบฑเบเบเบฐเบเบฒเปเบญเบเบเบฒเบเปเบเบทเปเบญเบเบเบญเบเบฅเบฒเบง. เปเบฅเบฐเบเปเบฒเบชเปเบฒเบฅเบฑเบ Android เบกเบฑเบเบเปเบญเบเบเปเบฒเบเบเปเบฒเบเบเบฒเบ - เบเบฐเบเบญเบ, เบฅเบปเบเบเบฒเบก .apk
เปเบฅเบฐเบญเบฑเบเปเบซเบฅเบเบกเบฑเบเปเบชเป Google Developer Console, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบชเปเบฒเบฅเบฑเบ iOS เปเบเบทเปเบญเบเบกเบทเบเบฒเบเปเบเบเบขเบฒเบเบเปเบฒเบ Xcode เปเบเปเบเปเบญเบเปเบซเปเบเบงเบเปเบฎเบปเบฒเบเบญเบเปเบฅเบเบเบตเปเบเบดเปเบเปเบซเบเป - เบเบงเบฒเบกเบเบฐเบเบฒเบเบฒเบกเปเบเบทเปเบญเบเบฒเบงเปเบซเบฅเบเปเบเปเบกเบเบฑเบเปเบเบฑเบเบกเบฑเบเบเบฐเบชเบดเปเบเบชเบธเบเบฅเบปเบเบเปเบงเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเปเบฅเบฐเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฐเบเบฒเบเบฒเบกเบญเบตเบเปเบเบทเปเบญเบซเบเบถเปเบ. เบกเบฑเบเปเบเปเบซเบฑเบเบญเบญเบเบงเปเบฒเบเบฑเบเบเบฑเบเบเบฐเบเบฒเบเปเบฒเบงเบซเบเปเบฒเบเบฒเบเบเปเบฒเบเบซเบผเบฒเบเบเบตเปเบชเบธเบเบเปเปเปเบเปเบเบฝเบเบฅเบฐเบซเบฑเบเบซเบผเบฒเบเบเบฑเปเบเบเปเปเปเบเบทเบญเบ, เปเบเปเปเบเบเบเบตเปเบเบฐเบเปเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ.
2016 เบเบต
เบเบงเบเปเบฎเบปเบฒเปเบเบตเบเปเบซเบเปเบเบถเปเบ, เบเบงเบเปเบฎเบปเบฒเบกเบตเบเบงเบฒเบกเบเบดเบเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเบเบฒเบเบเปเบญเบเบเบฑเบเบเบฑเบเบเบฐเบเบฒเบเบฒเบเบกเบทเปเบเบฑเบเบซเบกเบปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบญเบเบเบปเบง, เปเบฅเบฐเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบตเบชเบญเบเบเปเปเบเบฒเบเบปเบ, เปเบเบดเปเบเบเบฝเบเปเบเปเบเบธเบเบเบนเปเบเบงเบเปเบฎเบปเบฒเปเบเบชเบนเปเบญเบฑเบเบเบฐเปเบเบกเบฑเบ. เปเบเบเบตเบเบฝเบงเบเบฑเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเบเบดเบเบเบฑเปเบ Jenkins เปเบเบฑเบเบเบฑเปเบเบเปเบฒเบญเบดเบเปเบฅเบฐเบเบฝเบเบเบปเบงเบญเบฑเบเบชเบญเบเบเบตเปเบซเบเปเบฒเบขเปเบฒเบเบซเบผเบฒเบ, เบเปเบฒเบเบเบทเบเบฑเบเบเบฑเบเบเบตเป 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. เบเปเปเบกเบตเบเปเปเบกเบนเบเบซเบผเบฒเบเปเบเบปเปเบฒเบเบตเปเบกเบตเปเบเบเบฑเบเบเบธเบเบฑเบ - เบงเบดเบเบตเบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบซเบเบถเปเบ, เบงเบดเบเบตเบเบฒเบเบเปเบฒเปเบเปเบกเบฑเบ. เปเบฅเบฐเปเบเบทเปเบญเบเบกเบทเบเบญเบเบกเบฑเบเปเบญเบเปเบกเปเบเบเบฑเบเบเบตเปเบเบปเบงเบฐเปเบเปเบงเบฅเบฒเบเบฑเปเบ: เบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบปเบเบเบตเปเบเบฝเบเปเบเปเปเบฎเบฑเบเปเบซเปเบเบงเบเปเบฎเบปเบฒเบเบดเบเบซเบงเบฑเบเปเบฅเบฐเบกเบฑเบเบเบฒเบเบเบตเปเบเบฐเปเบเบทเปเบญเปเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบ magical เบเบตเปเปเบเบปเบฒเปเบเบปเปเบฒเบชเบฑเบเบเบฒเปเบงเป.
เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบเบปเบเบเบฐเปเบซเบเบเบเบปเปเบเบเปเบฅเบงเบกเบขเบนเปเปเบเบซเบผเบฑเบ fastlane เปเบกเปเบ gym
ะธ pilot
, เบเบงเบเปเบฎเบปเบฒเปเบเปเบเบฑเบเบเบฒเบเปเบเบทเปเบญเปเบฅเบตเปเบกเบเบปเปเบเบกเบฑเบ.
เบชเบฐเบเบฃเบดเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบเบเบฒเบเบเบฑเบเบเบธเบเปเบฅเบฑเบเบเปเบญเบ.
$ fastlane gym โ-workspace "Example.xcworkspace"
--scheme "AppName"
โ-buildlog_path "/tmp"
-โclean
เบเบงเบเปเบเบปเบฒเปเบเบปเปเบฒเปเบเปเบเบทเบเบเบฑเบเบเบธเบ, เบเปเบฒเบซเบฒเบเบงเปเบฒเบเบฝเบเปเบเปเปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบเปเปเปเบกเปเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบเบฑเบเบซเบกเบปเบเบเบตเปเบเปเบฒเปเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบ xcodebuild
, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบตเปเบเบญเบ - gym
เปเบเบฑเบเปเบญเบเบฐเบฅเบฒเบเบเบฐเปเบเบปเปเบฒเปเบเบเปเบญเบเปเบเปเบฅเบฐเบชเบดเปเบเบเบตเปเบขเบนเป. เปเบฅเบฐเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฑเบเบฅเบฐเบญเบฝเบเปเบเบตเปเบกเปเบเบตเบก, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเบเบปเบเบเบตเบเบฝเบงเบเบฑเบเบเบฑเบเบขเบนเปเปเบ xcodebuild
, เบเบฝเบเปเบเปเบเบฒเบเบเบฑเปเบเบเบทเปเบเบญเบเบเบฐเปเบเปเบกเปเบเบเบฐเปเบเปเบเบเบงเปเบฒ.
เปเบงเบฅเบฒเบเบตเป, เบเปเบเบญเบเปเบเบเบฑเบเบซเปเบญเบเบญเบญเบเบเปเบฒเบฅเบฑเบเบเบฒเบเปเบฅเบฐเบเบปเบงเบชเปเบฒเบเบฎเบนเบเปเบเบ xcpretty, เบเบฑเบเบเบถเบเบเบฒเบเบเปเปเบชเปเบฒเบเปเบเปเบเบฒเบเปเบเบฑเบเบเบตเปเบเบฑเบเปเบเบเบเบงเปเบฒ. เบเบตเปเปเบเปเปเบฅเบตเปเบกเบเบปเปเบเบเบตเปเบเบฐเบเปเบงเบเบเบฐเบขเบฑเบเปเบงเบฅเบฒเปเบเบเบฒเบเปเบเปเปเบเบเบฒเบเบเบฐเบเบญเบเบเบตเปเปเบเบเบซเบฑเบ, เปเบฅเบฐเบเบฒเบเบเบฑเปเบเบเบตเบกเบเบฒเบเบเปเบญเบเบชเบฒเบกเบฒเบเบเบดเบเปเบฅเปเบกเบฑเบเบเปเบงเบเบเบปเบเปเบญเบ.
เปเบเปเบซเบเปเบฒเปเบชเบเบเบฒเบ, เบเบฒเบเบงเบฑเบเปเบเบเบเบงเบฒเบกเปเบงเบเบฒเบเบเบฐเบเบญเบ xcodebuild
ะธ gym
เบเบงเบโเปเบฎเบปเบฒโเบเปเปโเปเบเปโเปเบฎเบฑเบโเบกเบฑเบ, เปเบเปโเบเบงเบโเปเบฎเบปเบฒโเบเบฐโเปเบงเปโเบงเบฒเบโเปเบโเปเบญโเบเบฐโเบชเบฒเบ - เปเบเบดเบ 30โ% speedup.
เบเบฐเบเบงเบเบเบฒเบเบเบฝเบงเบชเปเบฒเบฅเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบฑเบเบซเบกเบปเบ
เบเบต 2018 เปเบฅเบฐเบเบฐเบเบธเบเบฑเบ
เปเบเบเบต 2018, เบเบฐเบเบงเบเบเบฒเบเบชเปเบฒเบเปเบฅเบฐเปเบเบตเบเบเบปเบงเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบเปเบเปเบฒเบเปเบ Jenkins เบขเปเบฒเบเบชเบปเบกเบเบนเบ, เบเบฑเบเบเบฑเบเบเบฐเบเบฒเปเบเปเบขเบธเบเปเบเบปเบฒเบเบฒเบเบเปเบญเบเบเบปเบงเบญเบญเบเบเบฒเบเปเบเบทเปเบญเบเบเบญเบเบเบงเบเปเบเบปเบฒ, เปเบฅเบฐเบกเบตเบเบฝเบเปเบเปเบเบตเบกเบเบฒเบเบเปเบญเบเปเบเบปเปเบฒเบเบฑเปเบเบเบตเปเบกเบตเบชเบดเบเบเบตเปเบเบฐเบเปเบญเบ.
เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเปเบเบทเปเบญเบเบฑเบเบเบธเบเบเบฒเบเปเบเบตเบเบเบปเบงเบเบญเบเบเบฒเบเบเบปเบเบชเบญเบเปเบฅเบฐเบเบฒเบเบงเบดเปเบเบฒเบฐเบเบปเบเบเบตเป, เปเบฅเบฐเบชเบฐเบเบดเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเบตเปเบกเบเบถเปเบเปเบฅเบฐเปเบเบตเบเปเบซเบเป. เปเบเบตเบเปเบซเบเปเปเบฅเบฐเบเปเบฝเบเปเบเบเบเปเบญเบกเบเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ. เปเบเปเบงเบฅเบฒเบเบฑเปเบ, เบกเบตเบเบฐเบกเบฒเบ 10 เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ. เบเบดเบเบฒเบฅเบฐเบเบฒเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบกเบตเบชเบญเบเปเบงเบเบต, เบเบฑเปเบเปเบกเปเบเบเบฐเบกเบฒเบ 20 scripts "เบเปเบฒเบฅเบปเบเบเบตเบงเบดเบ".
เบเบธเบเปเบเบฑเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเปเบเบตเปเบกเบเบฑเปเบเบเบญเบเปเปเปเปเบซเปเบเบฑเบเบชเบฐเบเบฃเบดเบ, เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฑเบเบฅเบญเบ-เบงเบฒเบเบเบดเปเบเบชเปเบงเบเปเบชเปเปเบเบชเบฐเบเบฃเบดเบเบเบฑเบเปเบปเบ. เบเบฒเบเบเบตเบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบฎเบฑเบเบงเบฝเบเบขเปเบฒเบเบฅเบฐเบกเบฑเบเบฅเบฐเบงเบฑเบเบซเบผเบฒเบ, เปเบเปเปเบฅเบทเปเบญเบเปเบเบฒเบเบเปเบฝเบเปเบเบเบเบฑเปเบเบเปเบฒเบงเปเบเปเบชเบดเปเบเบชเบธเบเบฅเบปเบเบเปเบงเบเบเบฒเบเบเบดเบกเบเบดเบ, เปเบเบดเปเบเปเบเปเบเบฒเบเปเบเบฑเบเบเบญเบเปเบฅเบเบชเปเบฒเบฅเบฑเบเบเบตเบกเบเบฒเบเบเปเบญเบเบเบปเบงเปเบเปเปเบเบชเบฐเบเบดเบเปเบฅเบฐเบเบญเบเบซเบฒเบงเปเบฒเบเบปเบเบชเบฐเบซเบฅเบฒเบเปเบเบเบตเปเปเบเบตเปเบกเบเปเบฒเบชเบฑเปเบเบเบตเปเปเบฅเบฐเบชเบดเปเบเบเบตเปเบกเบฑเบเปเบฎเบฑเบ. เปเบเบเบเบปเปเบงเปเบเปเบฅเปเบง, เบกเบฑเบเบเปเปเบชเบฒเบกเบฒเบเปเบงเบปเปเบฒเปเบเปเบงเปเบฒเบชเบฐเบเบดเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบเบญเบเบชเปเบฒเบฅเบฑเบเปเบงเบเบตเบซเบเบถเปเบเปเบกเปเบเบกเบตเบเบงเบฒเบกเบเปเบฒเบเบเบทเบเบฑเบเบขเปเบฒเบเบซเบเปเบญเบ. เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบงเบเปเบเบปเบฒเปเบเปเบเบญเบเปเบเปเปเบฎเบฑเบเบชเบดเปเบเบเบฝเบงเบเบฑเบ.
เปเบเบทเปเบญเปเบฅเบตเปเบกเบเบปเปเบเบเบฐเบเบงเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบซเบกเป, เบกเบฑเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเปเบงเบฅเบฒเบซเบเบถเปเบเบกเบทเปเปเบเบทเปเบญเปเบฅเบทเบญเบเบชเบฐเบเบฑเบ "เบชเบปเบ" เบเบญเบเบชเบฐเบเบดเบเปเบซเบผเบปเปเบฒเบเบตเป, เปเบเปเปเบเบกเบฑเบเปเบฅเบฐเปเบงเบปเปเบฒเบงเปเบฒ "เปเบกเปเบ, เบกเบฑเบเปเบฎเบฑเบเบงเบฝเบ."
เปเบเบเปเบงเบเบฅเบถเบฐเปเบเบดเปเบเบฎเปเบญเบเบเบญเบเบเบต 2018, เบเบงเบเปเบฎเบปเบฒเบญเบตเบเบเบฑเปเบเปเบถเปเบเปเบเปเปเบเบดเปเบเบซเบฒเปเบชเบฑเปเบเบเบฒเบเบเบตเปเบเบฑเบเบเบฑเบเบเบฐเบเบฒเบขเบนเป.
เบงเบฝเบเบเบฒเบ #1: เบชเบฐเบซเบผเบธเบเบเบฑเปเบเบเบญเบเบชเบฐเบเบฃเบดเบเบเบฑเบเปเบปเบ เปเบฅเบฐเบเบฝเบเบเบทเบเปเบ Fastfile
เปเบเปเบงเบฅเบฒเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบฅเบตเปเบกเบเบปเปเบ, scripts เบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเบดเปเบเบเบทเบงเปเบฒเปเบเบฑเบ footcloth เบเบฐเบเบญเบเบเปเบงเบเบเบฑเปเบเบเบญเบเบเบฑเบเบซเบกเบปเบเปเบฅเบฐ crutches เปเบเบซเบเบถเปเบ shell script เปเบ Jenkins. เบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเปเปเบเบฑเบเปเบเปเบเปเบฝเบเปเบเบชเบนเปเบเปเปเปเบฅเบฐเบเบฒเบเปเบเปเบเปเบเบเบเบฒเบกเบเบฑเปเบเบเบญเบ.
เบเบงเบเปเบฎเบปเบฒเปเบเปเปเบเบดเปเบเบชเบดเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบกเบตเปเบฅเบฐเบเปเบฒเบเบปเบ 4 เบเบฑเปเบเบเบญเบเบเบตเปเปเบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบเบเปเบฒเบญเบฐเบเบดเบเบฒเบเบเบญเบ CI / CD เบเบญเบเบเบงเบเปเบฎเบปเบฒ:
- เบเบฒเบโเบเปเปโเบชเปเบฒเบ - เบเบฒเบโเบเบดเบโเบเบฑเปเบโเปเบญโเบเบฐโเบชเบฒเบโ, เบเบฒเบโเบเบฐโเบเบญเบโเบฎเบงเบโเบฎเบงเบกโ,
- test โ เปเบฅเปเบโเบเบฒเบโเบเบปเบโเบชเบญเบโเบซเบเปเบงเบโเบเบฑเบโเบเบฐโเบเบฒโ, เบเบฒเบโเบเบดเบโเปเบฅเปโเบเบฒเบโเบเบธเปเบกโเบเบญเบโ,
- sonar - เปเบเบตเบโเบเบปเบงโเบเบฑเบโเบซเบกเบปเบ linters เปเบฅเบฐโเบชเบปเปเบโเบเบปเบโเบฅเบฒเบโเบเบฒเบโเปเบซเป SonarQubeโ,
- deploy โ เบชเบปเปเบ artifact เบเบฑเบ alpha (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
เปเบเบเบปเบงเบขเปเบฒเบเบเปเบฒเบเปเบเบดเบ, เบเบฝเบเปเบเปเบชเปเบงเบเบซเบเบถเปเบเบเบญเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบฅเบฐเบเบธ: เปเบซเบผเบปเปเบฒเบเบตเปเปเบกเปเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบเปเปเบชเปเบฒเบ - schema, เบเบฒเบเบเบฑเปเบเบเปเบฒ, เบเบทเปเปเบเบฅเปเบเบฅเบกเบเบฒเบเบชเบฐเบซเบเบญเบ, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเปเบเบเบขเบฒเบ - Apple ID เบเบญเบเบเบฑเบเบเบตเบเบนเปเบเบฑเบเบเบฐเบเบฒ, เบฅเบฐเบซเบฑเบเบเปเบฒเบ, ID เปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ, เปเบฅเบฐเบญเบทเปเบเป. เบชเบธเบ. เปเบเบฑเบเบเบฒเบเบเบฐเบกเบฒเบเบเปเบฒเบญเบดเบ, เบเบงเบเปเบฎเบปเบฒเปเบญเบปเบฒเบเบฐเปเบเปเบซเบผเบปเปเบฒเบเบตเปเปเบชเปเปเบเปเบเบฅเปเบเบดเปเบชเบ - Gymfile
, Matchfile
ะธ Appfile
.
เปเบเบเบฑเบเบเบธเบเบฑเบเปเบ Jenkins เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบซเบฒเบเปเบฒเบชเบฑเปเบเบชเบฑเปเบเบเบตเปเบเปเปเบกเบปเบงเบกเบธเบกเปเบเบดเปเบเปเบฅเบฐเบชเบฒเบกเบฒเบเบญเปเบฒเบเปเบเปเบเปเบฒเบเบเปเบงเบเบเบฒ:
# fastlane ios <lane_name>
$ fastlane ios build
$ fastlane ios test
$ fastlane ios run_sonar
$ fastlane ios deploy
Hurray, เบเบงเบเปเบฎเบปเบฒเบเบตเบซเบผเบฒเบ
เปเบเบปเปเบฒเปเบเปเบฎเบฑเบเบซเบเบฑเบ? เบฅเปเบฒเบเบเปเบฒเบชเบฑเปเบเบชเปเบฒเบฅเบฑเบเบเบธเบเบเบฑเปเบเบเบญเบ. เปเบฎเบฑเบเบเบงเบฒเบกเบชเบฐเบญเบฒเบเบชเบฐเบเบดเบ, เบเบฑเบเบฅเบฝเบเบขเปเบฒเบเปเบเบฑเบเบฅเบฐเบเบฝเบเปเบเปเบเบฅเป fastlane. เบเปเบงเบเบเบงเบฒเบกเบเบดเบเบดเบเบดเบเบเบต, เบเบงเบเปเบฎเบปเบฒเปเบเปเปเบฅเปเบเปเบเบซเบฒเบเบฑเบเบเบฑเบเบเบฐเบเบฒเบเปเปเบซเปเบเบงเบเปเบเบปเบฒเปเบเบตเปเบกเบเบธเบเบขเปเบฒเบเบเบตเปเปเบเบปเบฒเปเบเบปเปเบฒเบเปเบญเบเบเบฒเบเปเบชเปเบเปเบญเบเปเบเบฑเบเบกเปเบฝเบเบเบญเบเบเบงเบเปเบเบปเบฒ.
เปเบเปเบเบงเบเปเบฎเบปเบฒเบฎเบฑเบเบฎเบนเปเปเบเปเบงเบฅเบฒเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบปเบเบเบฑเบเบเบงเบฒเบกเบซเบเบธเปเบเบเบฒเบเบเบฝเบงเบเบฑเบ - เบเบงเบเปเบฎเบปเบฒเบเบฑเบเบกเบต 20 scripts เบเบฐเบเบญเบเบเบตเปเบเบฐเบงเบดเบเบตเบเบฒเบเบซเบเบถเปเบเบซเบผเบทเบงเบดเบเบตเบเบฒเบเบญเบทเปเบเปเบฅเบตเปเบกเบเบปเปเบเบเปเบฒเบฅเบปเบเบเบตเบงเบดเบเบเบญเบเปเบเบปเบฒเปเบเบปเปเบฒเปเบญเบ, เบกเบฑเบเบเบฐเบกเบตเบเบงเบฒเบกเบซเบเบธเปเบเบเบฒเบเบซเบผเบฒเบเบเบตเปเบเบฐเปเบเปเปเบเปเบซเปเปเบเบปเบฒเปเบเบปเปเบฒ, เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒ scripts เบเบฐเบเปเบฒเบเปเบ repositories, เปเบฅเบฐเบเบงเบเปเบฎเบปเบฒเบเปเปเบกเบตเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเปเบญเบเบเบฑเปเบ. เปเบฅเบฐ, เปเบเบเบเบปเปเบงเปเบ, เบกเบฑเบเบเบฐเบเปเปเบชเบฒเบกเบฒเบเปเบเปเปเบเบเบงเบฒเบกเปเบเบฑเบเบเบงเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเปเบงเบเบงเบดเบเบตเบเบตเป.
เบงเบฝเบเบเบตเป 2: เปเบญเบปเบฒ Fastfile เบเบฝเบงเบชเบณเบฅเบฑเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ N
เปเบเบเบฑเบเบเบธเบเบฑเบเบกเบฑเบเปเบเบดเปเบเบเบทเบงเปเบฒเบเบฒเบเปเบเปเปเบเบเบฑเบเบซเบฒเปเบกเปเบเบเปเปเบเบฒเบเบซเบผเบฒเบ - เบเปเบฒเบเบปเบเบเบปเบงเปเบ, เปเบฅเบฐเปเบซเปเปเบ. เปเบกเปเบเปเบฅเปเบง, เปเบเบเบงเบฒเบกเปเบเบฑเบเบเบดเบ, เบเบฑเปเบเปเบกเปเบเบงเบดเบเบตเบเบฒเบเปเบเปเปเบเบเบฑเบเบซเบฒ. เปเบเปเปเบเบเบฑเบเบเบธเบเบฑเบเปเบเปเบงเบฅเบฒเบเบตเปเบเบงเบเปเบฎเบปเบฒ screwed เบกเบฑเบเบเบถเปเบ, เบเบงเบเปเบฎเบปเบฒเบเปเปเบกเบตเบเบงเบฒเบกเบเปเบฒเบเบฒเบเปเบ 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 เบกเบตเบเบฒเบเปเบเปเปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบตเป: .env
, .env.default
, .env.development
.
เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเปเบเปเบเบฑเบเบชเบดเบเปเบเปเบเปเบซเปเบญเบเบชเบฐเบซเบกเบธเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเปเบฅเบฑเบเบเปเบญเบ. เปเบซเปเบขเบนเปเปเบเบเปเบญเบเปเบเบฑเบเบกเปเบฝเบเบเบญเบเบเบนเปเบเบฑเบเบเบฐเบเบฒเบเปเปเปเบกเปเบเบชเบฐเบเบดเบ fastlane เปเบฅเบฐเบเปเปเบกเบนเบ meta เบเบญเบเบกเบฑเบ, เปเบเปเบเบฐเปเบเบเบตเปเปเบเบฑเบเปเบญเบเบฐเบฅเบฑเบเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบตเปเบขเบนเปเปเบเปเบเบฅเป. .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
เบเปเบญเบเบเบตเปเบเบฐเบเปเบฒเปเบเบตเบเบเบฒเบเบเปเบฒเบชเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบซเบฅเบ repository เบเบญเบเบเบงเบเปเบฎเบปเบฒเบเปเบงเบ scripts. เบเปเปเบเบฒเบกเบซเบผเบฒเบ:
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, เปเบเบฅเปเปเบกเปเบเบขเบนเปเปเบ repository เบเบฝเบงเบเบฑเบ, เปเบเปเบขเบนเปเปเบเบชเบฒเบเบฒเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ. iOS
, android
ะธ react_native
.
เปเบเปเบงเบฅเบฒเบเบตเปเบเบตเบกเบเบฒเบเบเปเบญเบเบเปเบญเบเบเบฒเบเปเบเบตเปเบกเบเบฒเบเบเบฑเปเบเบเบญเบเปเบซเบกเป, เบเบฒเบเบเปเบฝเบเปเบเบเบเบญเบเบชเบฐเบเบดเบเบเบทเบเบเบฑเบเบเบถเบเบเปเบฒเบ MR เปเบ git, เบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบญเบเบซเบฒเบเบนเปเบฎเปเบฒเบเบเบญเบเบชเบฐเบเบดเบเบเบตเปเปเบเบเบซเบฑเบ, เปเบฅเบฐเปเบเบเบเบปเปเบงเปเบเปเบฅเปเบง, เบเบญเบเบเบตเปเปเบเบปเปเบฒเบเปเบญเบเบเบฐเบเบฒเบเบฒเบกเบเปเบฒเบฅเบฒเบเบกเบฑเบ.
เบเบฝเบงเบเบตเปเบกเบฑเบเปเบเปเบเบญเบ
เบเปเบญเบเบซเบเปเบฒเบเบตเป, เบเบงเบเปเบฎเบปเบฒเปเบเปเปเบเปเปเบงเบฅเบฒเปเบเบเบฒเบเบฎเบฑเบเบชเบฒเบชเบฐเบเบดเบเบเบฑเบเบซเบกเบปเบ, เบเบฑเบเบเบธเบเปเบซเปเปเบเบปเบฒเปเบเบปเปเบฒเปเบฅเบฐเปเบเปเปเบเบเบปเบเบชเบฐเบเปเบญเบเบเบฑเบเบซเบกเบปเบเบเบญเบเบเบฒเบเบเบฑเบเบเบธเบ. เบกเบฑเบเปเบเบฑเบเปเบฅเบทเปเบญเบเบเบตเปเบซเบเปเบฒเบเบดเบเบซเบงเบฑเบเบซเบผเบฒเบเปเบกเบทเปเบญเปเบซเบเบเบปเบเบชเปเบฒเบฅเบฑเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเปเบฅเบฐเบเบฒเบเบขเบธเบเปเบงเบฅเบฒเปเบเบเบฒเบเบเปเบญเบเบญเบญเบเบกเบฒเปเบกเปเบเบเบฒเบเบเบดเบกเปเบเบเบเปเบฒเบเปเบเบตเปเบเบฒเบเบเบตเปเบเบฐเบเบดเบเบเบฒเบกเบขเบนเปเปเบ jumble เบเบญเบ shell scripts. เปเบเบเบฑเบเบเบธเบเบฑเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบงเปเบเปเบเบทเบเบซเบผเบธเบเบฅเบปเบเปเบเบฑเบเบเปเบฒเปเบชเบธเบเบเบตเป. เบเบฒเบโเบเปเบฝเบโเปเบเบโเปเบกเปเบโเปเบเปโเบเบปเบโเบญเบญเบโเปเบโเปเบโเบเบธเบโเบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโเปเบโเปเบงโเบฅเบฒโเบเบฝเบงโเบเบฑเบโ. เปเบฅเบฐเบกเบฑเบเปเบเปเปเบงเบฅเบฒ 15 เบเบฒเบเบตเปเบเบทเปเบญเปเบญเบปเบฒเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบซเบกเปเปเบเบปเปเบฒเปเบเปเบเบเบฐเบเบงเบเบเบฒเบ - เบเบฑเปเบเบเปเบฒเบเปเปเปเบกเปเปเบเบเปเบ CI เปเบฅเบฐเปเบเบตเปเบกเบเบฐเปเบเปเบชเปเบเปเบญเบเปเบเบฑเบเบกเปเบฝเบเบเบญเบเบเบนเปเบเบฑเบเบเบฐเบเบฒ.
เบกเบฑเบเปเบเบดเปเบเบเบทเบงเปเบฒเบเบธเบเบเบตเปเบกเบต Fastfile เบชเปเบฒเบฅเบฑเบ Android เปเบฅเบฐเบฅเบฒเบเปเบเบฑเบเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบฑเบเบเปเปเปเบเปเบฎเบฑเบเบเบฒเบเบญเบฐเบเบดเบเบฒเบ; เบเปเบฒเบเบปเบเบเบงเบฒเบกเบเบตเปเบซเบเปเบฒเบชเบปเบเปเบ, เบเปเบญเบเบเบฐเบเบฝเบเบเปเปเปเบเบทเปเบญเบ. เบเปเบญเบเบเบฐเบเบตเปเบเบเบตเปเปเบซเบฑเบเบเปเบฒเบเบฒเบกเบซเบผเบทเบเปเบฒเปเบเบฐเบเปเบฒเบเบญเบเปเบเบปเปเบฒ "เปเบเบปเปเบฒเบเบฐเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเปเปเบเบงเปเบ" เปเบเบเปเบฒเปเบซเบฑเบเบซเบผเบทเปเบ Telegram
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com