ืืื ืืืึธืื ืืื ืฆื ืจืขืื ืืืขืื ืงืขืกืืืืขืจืืืง ืื ืึทืืจืืืฉืึทื ืืื ืขืงืกืคึผืจืขืก ืคึฟืึทืจ ืจืืจืขืืืืืง ืึทืคึผืคึผืก ื ืืฆื ืคืึทืกืืืึทื ืข. ืืื ืืืจ ืื ืกืืจืืืขื ื CI / CD ืืืืฃ ืึทืืข ืจืืจืขืืืืืง ืึทืคึผืืึทืงืืืฉืึทื ื, ืืื ืืืจ ืืึทื ืืึธืจื ืืื ืืืึธืก ืืขืืจืืคื ืืื ืื ืกืืฃ.
ืขืก ืืื ืฉืืื ืืขื ืื ืืึทืืขืจืืึทื ืืืืฃ ืื ื ืขืฅ ืืืืฃ ืื ืืขืฆืืึทื, ืืืึธืก ืืืจ ืืึธืื ืึทืืื ืืขืคืขืื ืืื ืื ืึธื ืืืื, ืึทืืื ืืื ืืืื ื ืืฉื ืืึทืฉืจืืึทืื ืืขื ืืขืฆืืึทื ืืื ืืขืืึทื, ืึธืืขืจ ื ืึธืจ ืึธืคึผืฉืืงื ืฆื ืืืึธืก ืืืจ ืืึธืื ืืขืืึธืื:
ืืึทืึทืืืขืจ ืคืึทืกืืืึทื ืข ืืึทืงืืืืขื ืืืืฉืึทื ืืืืฉืคืืื ืคืื ืื ืืขืจืข ืงืึธืืคึผืึทื ืืขืก ืืืจ ืึธืืึทืืืื ืื ืคึฟืึทืจืืึทืืืื ื ืคืื ืืึธืก ืึทืคึผืืึทืงืืืฉืึทื ื ืืื Fastlane
ืืขืจ ืึทืจืืืงื ืืืฉืืืื ืคืื ืฆืืืื ืืืืื:
- ืืื ืืขืจืืจืื ื ืฆื ืื ืืืขืจืืืฉืึทื ืก ืคืื ืจืืจืขืืืืืง ืกื / ืกื ืืื ืื ืคืืจืืข
- ืืขืื ืืฉ ืืืืืื ื ืคึฟืึทืจ ืจืึธืืืื ื ืืืืก ืกื / ืกื ืคึฟืึทืจ N-ืึทืคึผืคึผืืืงืึทืืืึธื ืก
ืืขืจ ืขืจืฉืืขืจ ืืืื ืืื ืืขืจ ืืขื ืงืฉืึทืคื ืคึฟืึทืจ ืื ืึทืื ืืขื, ืืื ืืขืจ ืฆืืืืืืขืจ ืืื ืึท ืืขืจืคืึทืจืื ื ืืืึธืก ืืืจ ืงืขื ืขื ืฆืืืืืื ืฆื ืืื.
ืึทืืื ืืื ืืขืฉืขื ืืืกืืึธืจืืฉ
ืืึธืจ 2015
ืืืจ ื ืึธืจ ืกืืึทืจืืขื ืืขืืืขืืึธืคึผืื ื ืจืืจืขืืืืืง ืึทืคึผืืึทืงืืืฉืึทื ื, ืืขืืึธืื ืืืจ ืืึธื ื ืื ืืืืกื ืขืคึผืขืก ืืืขืื ืงืขืกืืืืขืจืืืง ืื ืึทืืจืืืฉืึทื, ืืขืืืึธืคึผืก ืืื ืื ืืขืจืข ืืึธืืขืจื ืืื ืื. ืืขืืขืจ ืึทืคึผืืึทืงืืืฉืึทื ืืขืจืืืึทื ืืืงื ืืื ืจืึธืืื ืืืืก ืืืจื ืื ืืขืืืขืืึธืคึผืขืจ ืืื ืคึฟืื ืืืื ืืึทืฉืื. ืืื ืืืื ืคึฟืึทืจ ืึทื ืืจืืื ืขืก ืืื ืืึทื ืฅ ืคึผืฉืื - ืคืืจืืืืื, ืืขืืชืืขื .apk
ืืื ืืคึผืืึธืึทืืขื ืขืก ืฆื ืื Google ืืขืืืขืืึธืคึผืขืจ ืงืึทื ืกืึธืื, ืืขืืึธืื ืคึฟืึทืจ ืืึธืก ืื ืืขืืึธืื ืคืึทืจืฉืคึผืจืืืืื ื ืืขืฆืืึทื ืืืจื Xcode ืืื ืงืก ืืื ืื ืืื ืืจืืืก ืืืื ืื ืื - ืคืจืืืื ืฆื ืึธืคึผืืึธืืืจื ืื ืึทืจืงืืืื ืึธืคื ืืขืขื ืืืงื ืืื ืขืจืจืึธืจืก ืืื ืืืจ ืืึธืื ืฆื ืคึผืจืืืืจื ืืืืืขืจ. ืขืก ืคืืจืงืขืจื ืืืืก ืึทื ืื ืืขืจืกื ืึทืืืึทื ืกืืจืืข ืืขืืืขืืึธืคึผืขืจ ืืื ื ืืฉื ืฉืจืืึทืื ืงืึธื ืขืืืขืืข ืืึธื ืคึผืขืจ ืืืืฉ, ืึธืืขืจ ืืึทื ืฅ ืจืืืืกืื ืื ืึทืคึผืืึทืงืืืฉืึทื.
ืืึธืจ 2016
ืืืจ ืืขื ืขื ืืขืืืืงืกื, ืืืจ ืืึธืื ืฉืืื ืืขืืึทื ืง ืืืขืื ืืื ืฆื ืืึทืคืจืืึทืขื ืืขืืืขืืึธืคึผืขืจืก ืคืื ืึท ืืึทื ืฅ ืืึธื ืคึฟืึทืจ ืึท ืืขืืืื ื, ืืื ืึท ืฆืืืืื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืืืื ืืจืืืก, ืืืึธืก ื ืึธืจ ืคึผืืฉื ืืื ืื ืืขืจ ืฆื ืึธืืึทืืืืฉืึทื. ืืื ืืขื ืืขืืื ืืึธืจ, ืืืจ ืืื ืกืืึทืืืจื Jenkins ืคึฟืึทืจ ืื ืขืจืฉืืขืจ ืืึธื ืืื ืืขืฉืจืืื ืึท ืืื ืื ืคืื ืกืงืขืจื ืกืงืจืืคึผืก, ืืืืขืจ ืขื ืืขื ืฆื ืื ืืืึธืก ืคืึทืกืืืึทื ืข ืืืืึทืื ืืื ืืืื ืืึทืงืืืืขื ืืืืฉืึทื.
$ xcodebuild clean archive -archivePath build/MyApp
-scheme MyApp
$ xcodebuild -exportArchive
-exportFormat ipa
-archivePath "build/MyApp.xcarchive"
-exportPath "build/MyApp.ipa"
-exportProvisioningProfile "ProvisioningProfileName"
$ cd /Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/
$ ./altool โupload-app
-f {abs path to your project}/build/{release scheme}.ipa
-u "[email protected]"
-p "PASS_APPLE_ID"
ืฆืื ืืึทืืืืขืจื, ืืื ืืืฆื ืืืืื ืืื ืืืขืจ ืืขืืืขืืึธืคึผืขืจืก ืืขืืืืืกื ืืื ืื ืกืงืจืืคึผืก ืึทืจืืขื ืืื ืืืึธืก ืืขื ืกืึธืฃ ืึธื ืืืืื ืคืื ืฉืืืกืืขื ืืื ืืืจืฃ, ืืื ืืืขื ืขืคึผืขืก ืฆืขืืจืืื ืืืืืขืจ, ืืื ืืึทืงืืืขื ืื "ืคึผืจืขืืืืง ืืืื ืื ืื" ืคึฟืึทืจ ืึทื ืึทืืืืืื ื ืืึธืืก.
ืืึธืจ 2017
ืืึธืก ืืึธืจ ืืืจ ืืขืืขืจื ื ืึทื ืขืก ืืื ืึทืืึท ืึท ืืึทื ืืื ืคืึทืกืืืึทื. ืขืก ืืื ืืขืืืขื ื ืื ืึทืืื ืคืื ืืื ืคึฟืึธืจืืึทืฆืืข ืืื ืขืก ืืื ืืืฆื - ืืื ืฆื ืึธื ืืืืื ืืืื ืขืจ, ืืื ืฆื ื ืืฆื ืขืก. ืืื ืื ืืขืฆืืึทื ืืื ืืื ื ืึธื ืืจืึธื ืืื ืืขืจ ืฆืืื: ืงืขืกืืืืขืจืืืง ืขืจืจืึธืจืก ื ืึธืจ ืืืกืึทืคึผืืื ืื ืืื ืื ืืื ืขืก ืืื ืฉืืืขืจ ืฆื ืืืืืื ืืื ืื ืืึทืืืฉืืงืึทื ืึธืืึทืืืืฉืึทื ืืืึธืก ืืื ืฆืืืขืืืื.
ืึธืืขืจ, ืื ืืืืคึผื ืืืืืืึทืืื ืึทืจืืึทื ืืขืจืขืื ื ืืื ืื ืคืึทืกืืืึทื ืข ืืึทืจืฅ ืืขื ืขื gym
ะธ pilot
, ืืืจ ืืขืจืืื ืฆื ืึธื ืืืืื ืขืก.
ืืื ืืืขืจ ืกืงืจืืคึผืก ืืึธืื ืฉืืื ืืืคึผืจืืืื ืึท ืืืกื.
$ fastlane gym โ-workspace "Example.xcworkspace"
--scheme "AppName"
โ-buildlog_path "/tmp"
-โclean
ืืื ืืึธืื ืฉืืื ืืืคึผืจืืืื, ืืืื ื ืึธืจ ืืืืึทื ื ืื ืึทืืข ืื ืคึผืึทืจืึทืืขืืขืจืก ื ืืืืืง ืคึฟืึทืจ xcodebuild
, ืืืจ ืืึทืจืคึฟื ืฆื ืึธื ืืืืึทืื - gym
ืืืขื ืื ืืืคึผืขื ืืึทื ืืื ืคึฟืึทืจืฉืืืื ืืื ืืื ืืืึธืก ืืืื. ืืื ืคึฟืึทืจ ืืขืจ ืคืืื-ืืื ืื ื, ืืืจ ืงืขื ืขื ืกืคึผืขืฆืืคืืฆืืจื ืื ืืขืืืข ืฉืืืกืืขื ืืื ืืื xcodebuild
, ืืืืื ืื ื ืึธืืขื ืคืื ืื ืฉืืืกืืขื ืืื ืงืืึธืจ.
ืืึธืก ืืึธื, ืืึทื ืง ืฆื ืกืคึผืึธืจืืืึทื ืืื ืื ืืขืืืื-ืืื ืงืกืงืคึผืจืขืื ืคืึธืจืืึทืืืขืจ, ืื ืืืืขื ืืึธืืก ืืึธืื ืืืขืจื ืคืื ืืขืจ ืืขืืืฉืึทืืึทื. ืืึธืก ืืึธื ืึธื ืืขืืืืื ืฉืคึผืึธืจื ืฆืืื ืืืืฃ ืคืืงืกืืจ ืฆืขืืจืืื ืึทืกืขืืืืื, ืืื ืืื ืื ืืขืืืื ื ืืึทื ืฉืึทืคึฟื ืงืขื ืจืขืืขื ืขื ืขืก ืืืืก ืืืืฃ ืืืืขืจ ืืืืื.
ืฆืื ืืึทืืืืขืจื, ืคึฟืึทืจืืึทืืืื ื ืืืืงืืึทื ืืขืืฉืขืจืืึทื ืฅ xcodebuild
ะธ gym
ืืืจ ืืึธื ื ืื ืืึธื ืืึธืก, ืึธืืขืจ ืืืจ ืืืขืื ืฆืืืจืื ืื ืืึทืงืืืืขื ืืืืฉืึทื - ืึทืจืืืฃ ืฆื 30% ืืืืงืืึทื.
ืืืื ืคึผืจืึธืฆืขืก ืคึฟืึทืจ ืึทืืข ืึทืคึผืืึทืงืืืฉืึทื ื
ืืึธืจ 2018 ืืื ืืืฆื
ืืื 2018, ืืขืจ ืคึผืจืึธืฆืขืก ืคืื ืืืืขื ืืื ืจืึธืืืื ื ืืืืก ืึทืคึผืืึทืงืืืฉืึทื ื ืืึธืจ ืืจืืืขืจืืขืคืืจื ืฆื Jenkins, ืืขืืืขืืึธืคึผืขืจืก ืคืืจืฉืืืคื ืจืืืืกืื ื ืคืื ืืืืขืจ ืืืฉืื ืขื, ืืื ืืืืื ืื ืืขืืืื ื ืืึทื ืฉืึทืคึฟื ืืื ืื ืจืขืื ืฆื ืืขืืืื ื.
ืืืจ ืืึธืื ืฉืืื ืืขืืืืื ืฆื ืคึฟืึทืจืืขืกืขืจื ืื ืงืึทืืขืจ ืคืื ืืขืกืฅ ืืื ืกืืึทืืืง ืึทื ืึทืืืกืืก, ืืื ืืื ืืืขืจ ืกืงืจืืคึผืก ืืขืืืืงืกื ืืื ืืขืืืืงืกื. ืืขืืืืงืกื ืืื ืืขืืืื ืฆืืืืืขื ืืื ืืื ืืืขืจ ืึทืคึผืืึทืงืืืฉืึทื ื. ืืื ืืขืจ ืฆืืื, ืขืก ืืขื ืขื ืืขืืืขื ืืืขืื 10 ืึทืคึผืืึทืงืืืฉืึทื ื, ืงืึทื ืกืืืขืจืื ื ืึทื ืืืจ ืืึธืื ืฆืืืื ืคึผืืึทืืคืึธืจืืก, ืืึธืก ืืื ืืืขืื 20 "ืืขืืขืืืง" ืกืงืจืืคึผืก.
ืืขืืขืก ืืื ืืืืก ืืืจ ืืืื ืืขืืืืื ืฆืืืขืื ื ื ืืืข ืฉืจืื ืฆืื ืฉืจืืคื, ืืืื ืืืจ ืืขืืืื ืงืืคืืจื-ืคืืกื ืื ืฉืืืงืืขื ืืื ืืืข ืฉืึธื ืฉืจืืคืื. ืืึธืืขืจ ืืืจ ืงืขื ืืึธืื ืืขืืจืืขื ืืขืจ ืงืขืจืคืึทืื, ืึธืืขืจ ืึธืคื ืึทืืึท ืขื ืืขืจืื ืืขื ืขื ืืืงื ืืื ืืื ืืืคึผืึธืก, ืืืึธืก ืคืืจืืืื ืืืขื ืืื ืืืื ืื ืื ืคึฟืึทืจ ืื ืืขืืืื ื ืืึทื ืฉืึทืคึฟื ืฆื ืคืึทืจืจืืืื ืกืงืจืืคึผืก ืืื ืืขืคึฟืื ืขื ืืืืก ืืืึธืก ืงืืื ืืึธืืขืจ ืฆืืืขืืขืื ืืขื ืืึทืคึฟืขื ืืื ืืืึธืก ืขืก ืืึทืงืข ืืื. ืืื ืึทืืืขืืืื, ืขืก ืงืขื ื ืืฉื ืืืื ืืขืืึธืื ืึทื ืื ืกืงืจืืคึผืก ืคึฟืึทืจ ืคึฟืึทืจืืึทืืืื ื ืคึฟืึทืจ ืืืื ืคึผืืึทืืคืึธืจืืข ืืขื ืขื ืืคึผืืืช ืขืคึผืขืก ืขื ืืขื. ืืึธืืฉ ืืื ืืึธืื ืืืืขืจ ืืขืืื ืื ืืขืืืข ืืึทื.
ืืื ืกืืจ ืฆื ืึธื ืืืืื ืึท ืคึผืจืึธืฆืขืก ืคึฟืึทืจ ืึท ื ืืึทืข ืึทืคึผืืึทืงืืืฉืึทื, ืขืก ืืื ื ืืืืืง ืฆื ืคืึทืจืืจืขื ืืขื ืึท ืืึธื ืฆื ืืืืกืงืืืึทืื ืึท "ืคืจืืฉ" ืืืขืจืกืืข ืคืื โโืื ืกืงืจืืคึผืก, ืืืืึทื ืขืก ืืื ืืึธืื ืึทื "ืืึธ, ืขืก ืึทืจืืขื."
ืืื ืื ืืืืขืจ ืคืื 2018, ืืืจ ืึทืืึธื ืืืืืขืจ ืืขืงืืงื ืฆื ืื ื ืึธื ืืขืืืขืืึธืคึผืื ื ืคืึทืกืืืึทื ืข.
ืึทืจืืขื #1: ืกืึทืืขืจืืื ืึทืืข ืฉืจืืคื ืกืืขืคึผืก ืืื ืจืืจืืื ืืื ืืื Fastfile
ืฐืข ื ืื ืจ ืืื ื ืื ื ืื ืืขืืืื ื ืืื ื ืืื ืืืขืจ ืข ืฉืจืืคื ื ืืืืกืืขืืขื , ืฐ ื ื ืคืืกึพืฉืืืฃ , ืฐืขืืืข ืจ ืื ื ืืืฉืืื ืข ื ืคื ื ืื ืข ืืจืขืค ื ืื ื ืงืจืื ื ืื ื ืืฒ ื ืฉืื ื ืฉืจืืค ื ืื ื ืืืฉืขื ืงืื ืก . ืืืจ ืืึธืื ื ืืฉื ื ืึธื ืกืืืืืฉื ืฆื ืจืขืจื - ืืื ืืข ืืื ืืืื ืืืจื ืืื ืข.
ืืืจ ืืึธืื ืืขืงืืงื ืืืืฃ ืืืึธืก ืืืจ ืืึธืื ืืื ืืืืขื ืึทืคืืื 4 ืกืืขืคึผืก ืืืึธืก ืคึผืึทืกืืง ืื ืืึทืฉืจืืึทืืื ื ืคืื ืืื ืืืขืจ ืกื / ืกื:
- ืืืืขื - ืื ืกืืึทืืืจื ืืืคึผืขื ืืึทื ืกืื, ืึทืกืขืืืึทื ืื ืึทืจืงืืืื,
- ืคึผืจืืืืจื - ืคืืืกื ืืืง ืืขืืืขืืึธืคึผืขืจ ืึทืคึผืึทืจืึทื ืืขืกืฅ, ืงืึทืืงืืึทืืืืืื ื ืงืึทืืืขืจืืืืฉ,
- sonar - ืืึธื ืืฉืื ืึทืืข ืืืื ืืขืจื ืืื ืกืขื ืื ืจืืคึผืึธืจืฅ ืฆื SonarQube,
- ืฆืขืืืืงืืขื - ืฉืืงื ืึท ืึทืจืืึทืคืึทืงื ืฆื ืึทืืฃ (ืืขืกืืคืืืืื).
ืืื ืืืื ืืืจ ืืึธื ื ืื ืืืื ืืื ืืขืืึทืืืก, ืึธืืืืืื ื ืื ืฉืืืกืืขื ืืขื ืืฆื ืืื ืึทืงืฉืึทื ื, ืืืจ ืืืขื ืืึทืงืืืขื ืืขื 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
ืืื ืคืึทืงื, ืืื ืืืขืจ ืขืจืฉืืขืจ ืคืึทืกืืคืืืข ืืื ืืขืืืขื ืืึทื ืกืืจืึทืก, ืงืึทื ืกืืืขืจืื ื ืขืืืขืืข ืคืื โโโโืื ืงืจืึทืืฉืื ืืืึธืก ืืืจ ื ืึธื ืืืจืฃ ืืื ืื ื ืืืขืจ ืคืื ืคึผืึทืจืึทืืขืืขืจืก ืืืึธืก ืืืจ ืกืึทืืกืืึทืืืืึทื:
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
.
ืืืฆื ืืื Jenkins ืืืจ ืงืขื ืขื ืจืืคื ืงืืจืฅ ืงืึทืืึทื ืื ืืืึธืก ืืึธื ื ืื ืืืขืจ ืื ืืืื ืื ื ืืื ืืขื ืขื ืืืืื ืืืื ืขืืืืืง ืืืจื ืื ืืืื:
# fastlane ios <lane_name>
$ fastlane ios build
$ fastlane ios test
$ fastlane ios run_sonar
$ fastlane ios deploy
ืืืจื, ืืืจ ืืขื ืขื ืืจืืืก
ืืืึธืก ืืึธื ืืืจ ืืึทืงืืืขื? ืงืืึธืจ ืงืึทืืึทื ืื ืคึฟืึทืจ ืืขืืขืจ ืฉืจืื. ืงืืื ื ืึทืจืืืฃ ืกืงืจืืคึผืก, ื ืืืื ืขืจืืื ืืืฉื ืืื ืคืึทืกืืืึทื ืข ืืขืงืขืก. ืคืจืืื ืืืขื, ืืืจ ืืขืืืคื ืฆื ืื ืืขืืืขืืึธืคึผืขืจืก ืืื ืืขืืขืื ืืื ืฆื ืืืืื ืึทืืฅ ืืื ืืืจืฃ ืฆื ืืืืขืจ ืจืืคึผืึทืืึทืืึธืจืื.
ืืืขืจ ืืืจ ืืืื ืืื ืืขืจ ืฆืืื ืืืื ืืขืืขื, ืื ืืืจ ืืืขืื ืืจืขืคื ืื ืืขืืืข ืฉืืืขืจืืืงืืืื - ืืืจ ืืืขืื ื ืื ืืืื 20 ืืกืืคื-ืฉืจืืคืื, ืืืืก ืืืขืื ืืืื ืืืขืจ ืื ืืขืจื ืื ืืืืื ืืขืื ืืืืขืจ ืืืืืขื ืข ืืขืื, ืขืก ืืืขื ืืืื ืฉืืืขืจืขืจ ืืื ืฆื ืจืขืืืงืืืจื, ืืืืืืื ืื ืฉืจืืคืื ืืืขืื ืืื ืืจืืืขืจืคืืจื ืืื ืจืืคืืืืืืจื, ืืื ืืืจ ืืืื ื ืืฉื ืืขืืื ืงืฒื ืฆืืืจืื ืืืจื. ืืื, ืืื ืึทืืืขืืืื, ืขืก ืืืขื ื ืืฉื ืืืื ืืขืืืขื ืฆื ืกืึธืืืืข ืืื ืืืขืจ ืืืืืืืง ืึทืืื.
ืึทืจืืขื #2: ืืึทืงืืืขื ืึท ืืืื ืคืึทืกืืคืืืข ืคึฟืึทืจ N ืึทืคึผืืึทืงืืืฉืึทื ื
ืืืฆื ืขืก ืืืื ื ืึทื ืกืึทืืืืื ื ืื ืคึผืจืึธืืืขื ืืื ื ืืฉื ืึทืืื ืฉืืืขืจ - ืฉืืขืื ืื ืืืขืจืืึทืืึทืื, ืืื ืืึธืื ืก ืืืื. ืืึธ, ืืื ืคืึทืงื, ืืึธืก ืืื ืืื ืื ืคึผืจืึธืืืขื ืืื ืกืึทืืืื. ืืืขืจ ืืื ืืขื ืืึธืืขื ื ืืืขื ืืืจ ืืขื ืขื ืฉืจืืืฃ ืขืก ืึทืจืืืฃ, ืืืจ ืืึธืื ื ืื ืงืืื ืขืงืกืคึผืขืจืืื ืืื ืคืึทืกืืืึทื ืข ืืื, ืืืขืจ ืืื ืจืืื, ืืื ืืืึธืก ืคืึทืกืืืึทื ืข ืืื ืืขืฉืจืืื, ืืื ื ืื ื ืืฆืืง ืืืืฉืคืืื ืืืืฃ ืื ื ืขืฅ - ืึทืืขืืขื ืืืืก ืืขืฉืจืืื ืืืขืื ืคืึทืกืืึทื ืืขืืึธืื ืืื ืืขืืืขื ืืืืืืขื ืฆื ืึท ืืืืฉืคึผืื ืคึฟืึทืจ ืืืื ืึทืคึผืืึทืงืืืฉืึทื ืคึฟืึทืจ ืืืื ืืขืืืขืืึธืคึผืขืจ.
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 ืืื ืึท ืืืืืื ื ืคึฟืึทืจ ืืขื: .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
ืืื ืงืก ืืขื ืืืืืื ื ืคึฟืึทืจ ืืืฆื, ืืึธืืฉ Fastlane ืืื ืึท ืืืืืื ื ืคึฟืึทืจ ืืึทืื ืืึธืืืื ื Fastfile ืืืจื import_from_git
, ืึธืืขืจ ืขืก ืึทืจืืขื ืืืืื ืคึฟืึทืจ Fastfile, ืึธืืขืจ ื ืืฉื ืคึฟืึทืจ ืื ืืขืจืข ืืขืงืขืก. ืืืื ืืืจ ืืืืื "ืืึทืงืข ืฉืืื", ืืืจ ืงืขื ืขื ืฉืจืืึทืื ืืืื ืืืืื action
.
ื ืขื ืืขื ืืึทื ื ืืื ืืขืืืื ืคึฟืึทืจ ืึทื ืืจืืื ืึทืคึผืืึทืงืืืฉืึทื ื ืืื ืจืขืึทืงืื ืึทืืืืืข, ืื ืืขืงืขืก ืืขื ืขื ืืื ืืขืจ ืืขืืืืงืขืจ ืจืืคึผืึทืืึทืืึธืจื, ืึธืืขืจ ืืื ืคืึทืจืฉืืืขื ืข ืฆืืืืืื iOS
, android
ะธ react_native
.
ืืืขื ืื ืืขืืืื ื ืืึทื ืฉืึทืคึฟื ืืืื ืฆื ืืืืื ืขืืืขืืข ื ืืึทืข ืฉืจืื, ืขื ืืขืจืื ืืขื ืืื ืื ืฉืจืืคื ืืขื ืขื ืจืขืงืึธืจืืขื ืืืจื MR ืืื ืืื, ืขืก ืืื ื ืื ืืขืจ ืืึทืจืคึฟื ืฆื ืงืืงื ืคึฟืึทืจ ืื ืงืืืคึผืจืืฅ ืคืื ืฆืขืืจืืื ืกืงืจืืคึผืก, ืืื ืืื ืึทืืืขืืืื, ืืืฆื ืืืจ ืืึธืื ืฆื ืคึผืจืืืืจื ืฆื ืืจืขืื ืขืก.
ืืืฆื ืึทื ืก ืขืก ืคึฟืึทืจ ืืืืขืจ
ืืื ืึทืืขืจ, ืืืจ ืคืืจืืจืืื ืฆืืื ืฆื ืืึทืืื ืึทืืข ืื ืกืงืจืืคึผืก, ืึทืคึผืืืืืื ื ืืื ืืื ืคืืงืกืืจ ืึทืืข ืื ืงืึทื ืกืึทืงืืืขื ืกืึทื ืคืื ืืขืจืืืึทื ืืืงืื ืืขื. ืขืก ืืื ืืขืืืขื ืืืืขืจ ืืืกืึทืคึผืืื ืื ืืืขื ืื ืกืืืืช ืคึฟืึทืจ ืขืจืจืึธืจืก ืืื ืืึทืื ืืืื ืืื ืจืืืืกืื ืืขื ืขื ืคึผืฉืื ืืืคึผืึธืก ืืืึธืก ืืขื ืขื ืืขืืืขื ืึทืืื ืฉืืืขืจ ืฆื ืืึทืืื ืฉืคึผืืจ ืืื ืื ืฆืขืืืฉืื ื ืคืื ืฉืึธื ืกืงืจืืคึผืก. ืืืฆื ืึทืืึท ืขืจืจืึธืจืก ืืขื ืขื ืจืืืืกื ืฆื ืึท ืืื ืืืื. ืขื ืืขืจืื ืืขื ืืขื ืขื ืจืึธืืื ืืืืก ืฆื ืึทืืข ืึทืคึผืืึทืงืืืฉืึทื ื ืืื ืึทืืึธื. ืืื ืขืก ื ืขืื 15 ืืื ืื ืฆื ืฉืืขืื ืึท ื ืืึทืข ืึทืคึผืืึทืงืืืฉืึทื ืืื ืืขื ืคึผืจืึธืฆืขืก - ืฉืืขืื ืึท ืืืกืืขืจ ืจืขืจื - ืืื ืืข ืืืืฃ ืกื ืืื ืืืืื ืื ืฉืืืกืืขื ืฆื ืื ืจืืคึผืึทืืึทืืึธืจื ืคืื ืื ืืขืืืขืืึธืคึผืขืจ.
ืขืก ืืืื ื ืึทื ืื ืคืื ื ืืื Fastfile ืคึฟืึทืจ ืึทื ืืจืืื ืืื ืึทืคึผืืึทืงืืืฉืึทื ืืกืืืข ืืืืืื ืึทื ืืงืกืคึผืืืื ื; ืืืื ืืขืจ ืึทืจืืืงื ืืื ืืฉืืงืึทืืืข, ืืื ืืืขื ืฉืจืืึทืื ืึท ืงืึทื ืืื ืืืืืฉืึทื. ืืื ืืืขื ืืืื ืฆืืคืจืืื ืฆื ืืขื ืืืื ืคึฟืจืืื ืึธืืขืจ ืคึฟืืจืืืืื "ืืื ืืืึธืื ืืืจ ืกืึธืืืืข ืืขื ืคึผืจืึธืืืขื" ืืื ืื ืืึทืืขืจืงืื ืืขื ืึธืืขืจ ืืืืฃ ืืขืืขืืจืึทื
ืืงืืจ: www.habr.com