Post on 14-Aug-2015
transcript
TRAVIS CI
% git add % git commit
% git push
Service hook
Mac VM Xcode
• Build • Test • Deploy • Notify
Setup
Availability
Speed
Easy Manual
Cloud Private network
DependsMedium
Trouble shooting Hard Easy
Cost Free for open source…..$129/month for private
repo
Setup
% gem install travis
% vim .travis.ymllanguage: objective-c script: - make notifications: email: false
all: xcodebuild -arch "i386" -configuration "Debug" -sdk "iphonesimulator" build | xcpretty
Code Sign
• Encrypt your keys, certificates, and provisioning profiles.
• Commit encrypted files to github
• Decrypt and install before build
% openssl aes-256-cbc -k "foo" -in certs/dist.cer -out certs/dist.cer.enc -a% openssl aes-256-cbc -k "foo" -in certs/dist.p12 -out certs/dist.p12.enc -a% openssl aes-256-cbc -k "foo" -in certs/dev.cer -out certs/dev.cer.enc -a% openssl aes-256-cbc -k "foo" -in certs/dev.p12 -out certs/dev.p12.enc -a% openssl aes-256-cbc -k “foo” -in certs/AppStore.mobileprovision -out certs/AppStore.mobileprovision.enc -a% openssl aes-256-cbc -k “foo” -in certs/AdHoc.mobileprovision -out certs/AdHoc.mobileprovision.enc -a
before_script:- openssl aes-256-cbc -k "$SECRET" -in certs/AdHoc.mobileprovision.enc -d -a -out certs/AdHoc.mobileprovision- openssl aes-256-cbc -k "$SECRET" -in certs/AppStore.mobileprovision.enc -d -a -out certs/AppStore.mobileprovision- openssl aes-256-cbc -k "$SECRET" -in certs/dist.cer.enc -d -a -out certs/dist.cer- openssl aes-256-cbc -k "$SECRET" -in certs/dist.p12.enc -d -a -out certs/dist.p12- openssl aes-256-cbc -k "$SECRET" -in certs/dist.cer.enc -d -a -out certs/dist.cer- openssl aes-256-cbc -k "$SECRET" -in certs/dist.p12.enc -d -a -out certs/dist.p12
Encrypt
Decrypt
Export
% travis encrypt “SECRET=foo” --add
env: global: - secure: eLo92Sw8KejuadMDTgY+bMAPow3D4zqkhBqXm8oUDctZn3qOJ5iJgMrNxfhSUx+AX/jiT07+U0vicHWRjGtkIGBeZJ8FVJL7NZQbIbqa80g0+MT4CNk4bumUphY0w+OOzsY8V4OKR90mUmzz3bVN8/ROFBZygeYBdiLnmhoQ93E= - secure: fGoTHN29GtCiux/aGJ2wm3NYtbyIRh0vnfoJafYdzWC6lj0PWrv0KVF31rHA56f7wPVLFnLrx2UhNzZHfMaavD9QSGVYNOcE2AVXuaRWnMrKmCjAkCW/7qnePwxcgcQTV+zQJTV523G4nDbWQMoQ9wugzTsxhj+Ob+ZF0cGEXUA=
Use command line
#!/bin/sh
# create keychain security create-keychain -p travis ios-build.keychain security default-keychain -s ios-build.keychain security unlock-keychain -p travis ios-build.keychain security set-keychain-settings -t 3600 -l ~/Library/Keychains/ios-build.keychain
# Certificate & Private key security import ./certs/cert.cer -k ~/Library/Keychains/ios-build.keychain -T /usr/bin/codesign security import ./certs/key.p12 -k ~/Library/Keychains/ios-build.keychain -P "$KEY_PASSWORD" -T /usr/bin/codesign
# Provisioning profiles mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles cp "./certs/AppStore.mobileprovision" ~/Library/MobileDevice/Provisioning\ Profiles/ cp "./certs/AdHoc.mobileprovision" ~/Library/MobileDevice/Provisioning\ Profiles/
language: objective-c osx_image: xcode6.4 before_install: - gem install fastlane before_script: - openssl aes-256-cbc -k "$SECRET" -in certs/EMQAppStore.mobileprovision.enc -d -a -out certs/EMQAppStore.mobileprovision - openssl aes-256-cbc -k "$SECRET" -in certs/EMQDev.mobileprovision.enc -d -a -out certs/EMQDev.mobileprovision - openssl aes-256-cbc -k "$SECRET" -in certs/cert.cer.enc -d -a -out certs/cert.cer - openssl aes-256-cbc -k "$SECRET" -in certs/dev-cert.cer.enc -d -a -out certs/dev-cert.cer - openssl aes-256-cbc -k "$SECRET" -in certs/key.p12.enc -d -a -out certs/key.p12 - openssl aes-256-cbc -k "$SECRET" -in certs/dev-key.p12.enc -d -a -out certs/dev-key.p12 - sh ./certs/install-keys.sh script: - make podfile: iOSApp/Podfile notifications: email: false slack: emq-inc:kPgGUXItHsgRsNtc77Fz3f3P env: global: - secure: OqyOY/I8QoucKb4uWY9xu9pkXgFoTahqiRl3BLOCJEbgKMKoUyDnk7N/ALktHp2S/NuB4zj5PNA50Lhb/zAnI7cTgZT0qEDJv2yDIM/j0wQFEHbKQafEHDWj2vAnook8OBpXiiykqWIb1dKgXCjzcEDjxhSo5V6V5IsdFHVAAew= - secure: gAw0juDvfHolj0zg93f2qnCFBxetvFIBTsMCgHMzStk0DyKrsh4IV+1x2CCqSFWo5q4EbXmsKKeyQKqfreIbbQTmZkAmXjIiVg70LDVgsqk5COWUTRgn21pUGWUFosxAkSZZghEf0o3Z62jA6FgeJkCkPcSLszuE0Qlbiq0SFSw= - secure: eLo92Sw8KejuadMDTgY+bMAPow3D4zqkhBqXm8oUDctZn3qOJ5iJgMrNxfhSUx+AX/jiT07+U0vicHWRjGtkIGBeZJ8FVJL7NZQbIbqa80g0+MT4CNk4bumUphY0w+OOzsY8V4OKR90mUmzz3bVN8/ROFBZygeYBdiLnmhoQ93E= - secure: fGoTHN29GtCiux/aGJ2wm3NYtbyIRh0vnfoJafYdzWC6lj0PWrv0KVF31rHA56f7wPVLFnLrx2UhNzZHfMaavD9QSGVYNOcE2AVXuaRWnMrKmCjAkCW/7qnePwxcgcQTV+zQJTV523G4nDbWQMoQ9wugzTsxhj+Ob+ZF0cGEXUA=
xcodebuild -arch "i386" -configuration "Debug" -sdk "iphonesimulator" build | xcprettyfastlane build
Setup
% sudo gem install fastlane
% fastlane init % vim fastlane/Appfile % vim fastlane/Fastfile
def unit_test xctest( workspace: 'EMQ.xcworkspace', scheme: 'EMQ-Demo', configuration: 'Demo', sdk: "iphonesimulator", arch: "i386", reports:[{ report: 'html', output: './test-report.html' }] )
slack( message: 'EMQ iOS App Unit Test', channel: '#dev-ios', default_payloads: [:test_result, :git_branch, :git_author, :last_git_commit], )
end
before_all do ENV["SLACK_URL"] = "https://hooks.slack.com/services/ABCDEFG/ABCDEFG/ABCDEFG"
clean_build_artifacts cocoapods end
lane :deliver_demo do
#increment_build_number sigh xcodebuild( workspace: 'EMQ.xcworkspace', configuration: 'Demo', scheme: 'EMQ-Demo', identity: 'iPhone Distribution: EMQ Limited (28HUT34N52)', clean: true ) unit_test xcarchive( workspace: 'EMQ.xcworkspace', configuration: 'Demo', scheme: 'EMQ-Demo', embed: '../certs/EMQAppStore.mobileprovision', identity: 'iPhone Distribution: EMQ Limited (28HUT34N52)' ) xcexport resign( ipa: 'EMQ-Demo.ipa', signing_identity: 'iPhone Distribution: EMQ Limited (28HUT34N52)', provisioning_profile: '../certs/EMQAppStore.mobileprovision', ) testflight(skip_deploy: true) end
all: ifeq ($(TRAVIS_PULL_REQUEST), false) fastlane test else agvtool new-version -all $(TRAVIS_BUILD_NUMBER) fastlane deliver_demo endif
xcodebuild -arch "i386" -configuration "Debug" -sdk "iphonesimulator" build | xcpretty
fastlane build
Trouble shooting
• Easy setup • No maintenance • Github integration • Bad for trouble shooting
• Automate your flows • Flexible, customizable • Life saver • Great for CI