Share
Embed
Transcript
49 slides
-
γΰτͰίίϩΦυϧ • It's a lot of trouble… • Beta Distribution
• Submitting to the App Store • Integration Tests 2 Apps (Targets) -
γΰτͰίίϩΦυϧ • Use fastlane to 1. Distribute beta buils 2.
Submit apps to the App Store 3. Take screenshots fastlane -
γΰτͰίίϩΦυϧ • Tools • Fabric (Crashlytics Beta) • fastlane •
CircleCI Beta Distribution -
γΰτͰίίϩΦυϧ • Tools • Fabric (Crashlytics Beta) • fastlane •
CircleCI Beta Distribution -
γΰτͰίίϩΦυϧ Beta Distribution fastlane / Fastfile lane :beta do #
Import certificates cert_dir = "./fastlane/certificates" import_certificates( cert_paths: [ File.join(cert_dir, "apple.cer") ], key_paths: [ File.join(cert_dir, "development.p12"), File.join(cert_dir, "distribution.p12") ] ) # Download provisioning profiles sigh( app_identifier: "com.wantedly.app-qa", adhoc: true ) # Build ipa( scheme: "app", configuration: "QA" ) # Push to Crashlytics crashlytics( crashlytics_path: "./Pods/Fabric/Crashlytics.framework", groups: "Developers" ) end Build Distribution Download Import -
γΰτͰίίϩΦυϧ Beta Distribution fastlane / Fastfile lane :beta do #
Import certificates cert_dir = "./fastlane/certificates" import_certificates( cert_paths: [ File.join(cert_dir, "apple.cer") ], key_paths: [ File.join(cert_dir, "development.p12"), File.join(cert_dir, "distribution.p12") ] ) # Download provisioning profiles sigh( app_identifier: "com.wantedly.app-qa", adhoc: true ) # Build ipa( scheme: "app", configuration: "QA" ) # Push to Crashlytics crashlytics( crashlytics_path: "./Pods/Fabric/Crashlytics.framework", groups: "Developers" ) end Build Distribution Download Import -
γΰτͰίίϩΦυϧ Beta Distribution fastlane / Fastfile lane :beta do #
Import certificates cert_dir = "./fastlane/certificates" import_certificates( cert_paths: [ File.join(cert_dir, "apple.cer") ], key_paths: [ File.join(cert_dir, "development.p12"), File.join(cert_dir, "distribution.p12") ] ) # Download provisioning profiles sigh( app_identifier: "com.wantedly.app-qa", adhoc: true ) # Build ipa( scheme: "app", configuration: "QA" ) # Push to Crashlytics crashlytics( crashlytics_path: "./Pods/Fabric/Crashlytics.framework", groups: "Developers" ) end Build Distribution Download Import -
γΰτͰίίϩΦυϧ Beta Distribution fastlane / Fastfile lane :beta do #
Import certificates cert_dir = "./fastlane/certificates" import_certificates( cert_paths: [ File.join(cert_dir, "apple.cer") ], key_paths: [ File.join(cert_dir, "development.p12"), File.join(cert_dir, "distribution.p12") ] ) # Download provisioning profiles sigh( app_identifier: "com.wantedly.app-qa", adhoc: true ) # Build ipa( scheme: "app", configuration: "QA" ) # Push to Crashlytics crashlytics( crashlytics_path: "./Pods/Fabric/Crashlytics.framework", groups: "Developers" ) end Build Distribution Download Import -
γΰτͰίίϩΦυϧ Beta Distribution fastlane / Fastfile lane :beta do #
Import certificates cert_dir = "./fastlane/certificates" import_certificates( cert_paths: [ File.join(cert_dir, "apple.cer") ], key_paths: [ File.join(cert_dir, "development.p12"), File.join(cert_dir, "distribution.p12") ] ) # Download provisioning profiles sigh( app_identifier: "com.wantedly.app-qa", adhoc: true ) # Build ipa( scheme: "app", configuration: "QA" ) # Push to Crashlytics crashlytics( crashlytics_path: "./Pods/Fabric/Crashlytics.framework", groups: "Developers" ) end Build Distribution Download Import -
γΰτͰίίϩΦυϧ Beta Distribution fastlane / Fastfile - Built-in Action lane
:beta do # Import certificates cert_dir = "./fastlane/certificates" import_certificates( cert_paths: [ File.join(cert_dir, "apple.cer") ], key_paths: [ File.join(cert_dir, "development.p12"), File.join(cert_dir, "distribution.p12") ] ) # Download provisioning profiles sigh( app_identifier: "com.wantedly.app-qa", adhoc: true ) # Build ipa( scheme: "app", configuration: "QA" ) # Push to Crashlytics crashlytics( crashlytics_path: "./Pods/Fabric/Crashlytics.framework", groups: "Developers" ) end Build Distribution Download Import Action Action Action -
γΰτͰίίϩΦυϧ Beta Distribution fastlane / Fastfile - Custom Action lane
:beta do # Import certificates cert_dir = "./fastlane/certificates" import_certificates( cert_paths: [ File.join(cert_dir, "apple.cer") ], key_paths: [ File.join(cert_dir, "development.p12"), File.join(cert_dir, "distribution.p12") ] ) # Download provisioning profiles sigh( app_identifier: "com.wantedly.app-qa", adhoc: true ) # Build ipa( scheme: "app", configuration: "QA" ) # Push to Crashlytics crashlytics( crashlytics_path: "./Pods/Fabric/Crashlytics.framework", groups: "Developers" ) end Build Distribution Download Import Custom Action -
γΰτͰίίϩΦυϧ Beta Distribution fastlane / Fastfile - Custom Action class
ImportCertificatesAction < Action def self.run(params) cert_paths = params[:cert_paths] key_paths = params[:key_paths] keychain = "ios-build.keychain" password = "ios-build" timeout_seconds = 3600 begin sh "security create-keychain -p #{password} #{keychain}" sh "security default-keychain -s #{keychain}" sh "security list-keychains -s #{keychain}" sh "security unlock-keychain -p #{password} #{keychain}" sh "security set-keychain-settings -t #{timeout_seconds} -l #{keychain}" cert_paths.each do |cert_path| sh "security import #{cert_path} -k #{keychain} -T /usr/bin/codesign" end key_paths.each do |key_path| # Don't use `sh` so as not to output a password. `security import #{key_path} -k #{keychain} -P #{ENV['P12_PASSWORD']} -T /usr/bin/codesign` raise "Password is not correct" unless $?.to_i == 0 end Helper.log.info 'Successfully import certificates .'.green rescue => ex Helper.log.error 'Failed to import certificates'.red raise ex end end … -
γΰτͰίίϩΦυϧ • Tools • Fabric (Crashlytics Beta) • fastlane •
CircleCI Beta Distribution -
γΰτͰίίϩΦυϧ Beta Distribution CircleCI / circle.yml deployment: beta: branch: master
commands: - bundle exec fastlane beta_app1 - bundle exec fastlane beta_app2 • Execute workflows with fastlane -
γΰτͰίίϩΦυϧ Beta Distribution CircleCI / circle.yml deployment: beta: branch: master
commands: - bundle exec fastlane beta_app1 - bundle exec fastlane beta_app2 • Execute workflows with fastlane -
γΰτͰίίϩΦυϧ Submitting Apps Fastfile lane :deploy do ensure_git_status_clean increment_build_number commit_version_bump
schemes = ["app1", "app2"] schemes.each do |scheme| ipa( scheme: scheme, configuration: "Release" ) deliver( deliver_file_path: "./fastlane/#{scheme}" ) end end -
γΰτͰίίϩΦυϧ Submitting Apps Fastfile lane :deploy do ensure_git_status_clean increment_build_number commit_version_bump
schemes = ["app1", "app2"] schemes.each do |scheme| ipa( scheme: scheme, configuration: "Release" ) deliver( deliver_file_path: "./fastlane/#{scheme}" ) end end • Specify Deliverfile for each app -
γΰτͰίίϩΦυϧ Submitting Apps Contents of Directories $ tree fastlane fastlane
├── Fastfile ├── app1 │ ├── Deliverfile │ … └── app2 ├── Deliverfile … -
γΰτͰίίϩΦυϧ Submitting Apps Contents of Directories $ tree fastlane fastlane
├── Fastfile ├── app1 │ ├── Deliverfile │ … └── app2 ├── Deliverfile … Multiple Deliverfiles -
γΰτͰίίϩΦυϧ Submitting Apps Contents of Directories $ tree fastlane fastlane
├── Fastfile └── app1 ├── Deliverfile └── metadata └── ja-JP ├── description.txt ├── keywords.txt ├── privacy_url.txt ├── software_url.txt ├── support_url.txt ├── title.txt └── version_whats_new.txt -
γΰτͰίίϩΦυϧ Taking Screenshots iPhone 5 iPhone 6 iPhone 6 Plus
iPad Air 2 Apps -
γΰτͰίίϩΦυϧ Taking Screenshots Fastfile lane :snapshot do schemes = ["app1",
"app2"] schemes.each do |scheme| snapshot( snapshot_file_path: "./fastlane/#{scheme}" ) end end -
γΰτͰίίϩΦυϧ Taking Screenshots Fastfile lane :snapshot do schemes = ["app1",
"app2"] schemes.each do |scheme| snapshot( snapshot_file_path: "./fastlane/#{scheme}" ) end end • Specify Snapfile for each app -
γΰτͰίίϩΦυϧ Taking Screenshots Contents of Directories $ tree fastlane fastlane
├── Fastfile ├── app1 │ ├── Snapfile │ … └── app2 ├── Snapfile … -
γΰτͰίίϩΦυϧ Taking Screenshots Contents of Directories $ tree fastlane fastlane
├── Fastfile ├── app1 │ ├── Snapfile │ … └── app2 ├── Snapfile … Multiple Snapfile -
γΰτͰίίϩΦυϧ Taking Screenshots Contents of Directories $ tree fastlane fastlane
├── Fastfile └── app1 ├── Snapfile └── js ├── helpers │ └── capture.js ├── screens │ ├── activitiesScreen.js │ ├── featureScreen.js │ ├── messagesScreen.js │ ├── profileScreen.js │ ├── projectScreen.js │ ├── projectsScreen.js │ ├── screen.js │ ├── settingsScreen.js │ └── welcomeScreen.js ├── screens.js └── snapshot.js -
γΰτͰίίϩΦυϧ • Use fastlane to 1. Distribute beta buils 2.
Submit apps to the App Store 3. Take screenshots