Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
iOSアプリを社内配信する場合の工夫
Search
ANDPAD inc
March 24, 2021
Programming
1
2.8k
iOSアプリを社内配信する場合の工夫
2021/03/24 ANDPAD TechLive #8 iOS/AndroidアプリエンジニアTalk!!
ANDPAD inc
March 24, 2021
Tweet
Share
More Decks by ANDPAD inc
See All by ANDPAD inc
「もっと正確に、もっと効率的に」ANDPADの写真書き込み機能における、 現場の声を形にしたエンハンス
andpad
0
110
複数チーム並行開発下でのコード移行アプローチ ~手動 Codemod から「生成AI 活用」への進化
andpad
0
180
Building the Real World with Ruby
andpad
0
41
Catch Up: Go Style Guide Update
andpad
0
280
OSS開発者という働き方
andpad
5
1.8k
Vue・React マルチプロダクト開発を支える Vite
andpad
0
160
プロダクト開発を支えるデータ利活用:中央集権から「民主化」までの軌跡
andpad
0
210
アンドパッドの Go 勉強会「 gopher 会」とその内容の紹介
andpad
0
430
読もう! Android build ドキュメント
andpad
1
480
Other Decks in Programming
See All in Programming
ゼロダウンタイムでミドルウェアの バージョンアップを実現した手法と課題
wind111
0
220
「文字列→日付」の落とし穴 〜Ruby Date.parseの意外な挙動〜
sg4k0
0
280
チーム開発の “地ならし"
konifar
8
6k
FlutterKaigi 2025 システム裏側
yumnumm
0
1.2k
Java_プロセスのメモリ監視の落とし穴_NMT_で見抜けない_glibc_キャッシュ問題_.pdf
ntt_dsol_java
0
230
Developing Specifications - Jakarta EE: a Real World Example
ivargrimstad
0
200
Querying Design System デザインシステムの意思決定を支える構造検索
ikumatadokoro
1
1.2k
CloudflareのSandbox SDKを試してみた
syumai
0
180
オフライン対応!Flutterアプリに全文検索エンジンを実装する @FlutterKaigi2025
itsmedreamwalker
2
270
Web エンジニアが JavaScript で AI Agent を作る / JSConf JP 2025 sponsor session
izumin5210
4
2k
AIと協働し、イベントソーシングとアクターモデルで作る後悔しないアーキテクチャ Regret-Free Architecture with AI, Event Sourcing, and Actors
tomohisa
2
8.9k
ソフトウェア設計の課題・原則・実践技法
masuda220
PRO
21
17k
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
38
2.9k
Building Applications with DynamoDB
mza
96
6.8k
Into the Great Unknown - MozCon
thekraken
40
2.2k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Git: the NoSQL Database
bkeepers
PRO
432
66k
We Have a Design System, Now What?
morganepeng
54
7.9k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
For a Future-Friendly Web
brad_frost
180
10k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Side Projects
sachag
455
43k
Designing for humans not robots
tammielis
254
26k
Transcript
iOS アプリを 素早く社内配布するための⼯夫 株式会社ANDPAD ⼩林由佳 @yukkobay 2021-03-24 ANDPAD TechLive #8
Related keywords iOS TestFlight Firebase AppDistribution Fastlane 1
⾃⼰紹介 : Yuka Kobayashi ANDPAD iOS エンジニア ⼊社5 ヶ⽉くらい 元気です
2
この発表で話すこと 1 回のビルドでTestFlight, Firebase AppDistribution の両⽅にデプ ロイする⽅法 .xcarchive と .ipa
と .app の違い simulator ⽤のアプリを配布する⽅法 話さないこと ビルド時間を短くするための設定やコードの書き⽅ 3
リリース前に社内でたくさん触る is ⼤事 フィードバックサイクルを短くすることにより品質を⾼める 作りかけの状態でも気付けることはたくさんある 開発に直接関わってない⼈達にも触ってほしい 営業、カスタマーサクセス、etc... 気軽に配布・インストールできる環境がほしいッ 4
TestFlight vs Firebase AppDistribution TestFlight ( 内部テスター ) Firebase AppDistribution
端末台数制限 30 台/1user 年間100 台※ ユーザー数制限 100 ⼈ 制限なし デプロイにかかる時間 処理待ちがある 即時 Export Method app-store adhoc ※ ADP のAdHoc 配信上の制限 結論 : どっちにもデプロイしたい 5
ということは、 2 回ビルドする? 各配布⽅法ごとに.ipa が必要 ExportMethod が違うだけなら、ビルドは 1 回で⼤丈夫 1.
archive (ビルド)して .xcarchive を作成 2. method を指定してexport し、 .xcarchive から .ipa を作る × 2 回 export はビルドするより短い時間で実⾏可能 3. .ipa をそれぞれにアップロードする 6
.xcarchive/.ipa/.app の関係 .app = 実⾏可能なアプリ .xcarchive = .app + dSYM
.ipa = 配布可能なアプリ .app にCodeSign したもの(をzip に固め ている)
fastlane で export する⽅法 # Fastfile archive_path = build_ios_app( #
or gym skip_package_ipa: true # export を skip する ) xcodebuild( export_archive: true, archive_path: archive_path, export_path: ipa_path, # この path に出⼒される export_options_plist: "./exportOptions-testflight.plist" # !! これが重要 ) # export_options_plist を変えて再度 export する
exportOptionsPlist で設定できること ExportMethod (app-store, ad-hoc, development) ProvisioningProfile Bitcode, iCloud 接続先などの設定
詳しくはターミナルで xcodebuild -h を実⾏ できないこと BuildSettings の変更 Bundle ID の変更
Working from home! ⼿元に検証したい実機がないことも多い 画⾯サイズ、古いOS バージョン、iPad 、etc…… アプリエンジニア以外がsimulator でビルドするのは難しい
simulator 向けにアプリ配布してみよう simulator 向けにビルドされた .app ファイルはsimulator にインスト ールが可能 任意のsimulator にドラッグ&ドロップするだけ
GoogleDrive やSlack など、任意の場所にアップロードして受け渡し が簡単
fastlane で .app を作る⽅法 # Fastfile SCHEME = "MyApp" xcodebuild(
scheme: SCHEME, configuration: "Debug", sdk: "iphonesimulator", # !! ここが重要 derivedDataPath: derived_data_path # 指定したパスに出⼒されるので ) # DerivedData の中から .app を掘り出す app_path = "../#{derived_data_path}/Build/Products/Debug-iphonesimulator/#{SCHEME}.app"
さいごに 誰でも簡単にアプリを触れる環境は、プロダクトを育てる 最適なワークフローはまだまだ模索中 ユーザー理解、プロダクト理解を⼤事にする⽂化
Appendix: simulator 向けにうまくビルドできない場合 BuildSettings にアーキテクチャの設定が必要かも "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; # Podfile
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64" end end