$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
About triangle
Search
Smith
February 21, 2017
Programming
0
57
About triangle
This slide presents processes inside of triangle (build button) focused on Unity and Xcode.
Smith
February 21, 2017
Tweet
Share
More Decks by Smith
See All by Smith
Zig なんもわからん 〜あるいは学びのモチベーション〜
dolow
0
360
Go に Generics がやってきた
dolow
0
580
NFT つくってみた
dolow
0
240
プロのエンジニアが1人日を捻出してレトロJRPGっぽいゲームを本気で作った
dolow
0
840
技術中間組織はじめました
dolow
0
95
Cipher.Mobile
dolow
0
90
Develop::Client::Game
dolow
1
30
Other Decks in Programming
See All in Programming
UIデザインに役立つ 2025年の最新CSS / The Latest CSS for UI Design 2025
clockmaker
18
7.4k
認証・認可の基本を学ぼう前編
kouyuume
0
200
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
130
dnx で実行できるコマンド、作ってみました
tomohisa
0
150
愛される翻訳の秘訣
kishikawakatsumi
1
320
TestingOsaka6_Ozono
o3
0
140
Flutter On-device AI로 완성하는 오프라인 앱, 박제창 @DevFest INCHEON 2025
itsmedreamwalker
1
100
手が足りない!兼業データエンジニアに必要だったアーキテクチャと立ち回り
zinkosuke
0
640
20 years of Symfony, what's next?
fabpot
2
350
エディターってAIで操作できるんだぜ
kis9a
0
720
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
260
これだけで丸わかり!LangChain v1.0 アップデートまとめ
os1ma
6
1.8k
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
56
14k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Producing Creativity
orderedlist
PRO
348
40k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
YesSQL, Process and Tooling at Scale
rocio
174
15k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Raft: Consensus for Rubyists
vanstee
141
7.2k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
4 Signs Your Business is Dying
shpigford
186
22k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
Transcript
▶ About
fn main { = Smith; me. (); } let me
introduce
Introduce.rs Individual name smith age 33 Employee since 2011 division
Client Architect group Game Architect occupation Engineer rust Beginner // trait は割愛 struct Smith; impl for Smith { fn (&self) -> &'static str { ” " } fn (&self) -> i32 { } } impl for Smith { fn (&self) -> WorkInfo { WorkInfo::Since( ) } fn (&self) -> WorkInfo { WorkInfo::Division(” ") } fn (&self) -> WorkInfo { WorkInfo::Group(” ") } fn (&self) -> WorkInfo { WorkInfo::Occupation(” ") } fn (&self) -> WorkInfo { WorkInfo::Rust(” ") } }
Introduce.rs 自己紹介の安定版 https://github.com/dolow/rust-helloworld
No more Rust today. (ごめんね)
Organization Client Architect Div. Game Architect Group smith
Agenda - Notice - What is Build ? - Inside
Build - Our Build Problem - Solution - Conclusion
Notice 当該資料では C# (Unity) での iOS/Android 向け開発を 前提として進行します
What is Build ? ビルドってなに?
Engineers does build
Engineers does maintain
Why ?
Inside Build 見てみよう
▶
C/C++ /Obj-C object Executable Runtime link compile ▶ Script
.ipa ▶ App
▶
Build for Editor
C# DLL Executable Runtime JIT ▶ compile compile Script
Editor Player DLL ▶ App
Build for iOS
Restriction iOS は厳しい
App Store Review Guidelines 2.5 Software Requirements 2.5.2 Apps should
be self-contained in their bundles, and may not read or write data outside the designated container area, nor may they download, install, or execute code, including other iOS, watchOS, macOS, or tvOS apps. ☓ JIT ✓ AOT
C# DLL Executable IL C++ object Unity Editor Xcode compile
dis- assemble convert compile link Runtime AOT ▶ ▶
iOS C# スクリプト上も Reflection.Emit などの JIT に依存する API は利用できない 実際には書けてビルドも出来るけど
実行時にエラーを吐く
Build for WebGL おまけ
C# DLL Javascript IL C++ LLVM- IR Unity Editor emscripten
compile dis- assemble convert compile convert ▶ ▶
▶ いろいろやってる
1 is enough
Our Build Problem ▶ ▶ それでも困ること
Build Target
“What’s that ?” “I know !”
Build Target - app name - icons - bundle ID
- provisioning profile - versions - run scripts - define symbols 開発用の リリース用の 外部会社に見せる用の 実験的機能開発用の 定期配信する安定版用の
Build Target ☓ ✓ compile option project settings
Solution どうすればいいの?
Solution 1. Knowing Xcode settings 2. Knowing Unity build
Knowing Xcode settings 1. Unity API 2. Info.plist (xml) 3.
project.pbxproj 3 things
Knowing Unity build 1. Preprocess / Postprocess 2. Unity Build
API 3. Applying timing 3 things
Unity build flow ▶ convert setting dto template setting files
apply Default
Unity build flow ▶ convert setting dto template Setting files
apply Preprocess load setting dto Postprocess apply modify modify Customized
iOS is OK ワタシ アイオーエス ビルド チョト デキル
More problems
To be continued…
Conclusion まとめ
Conclusion - コンパイルに関するメンテは稀 - ターゲットビルドの需要が多い - Unity はターゲットビルドに対応していない - Unity
の API で ある程度は対応できる - ビルドスクリプトを作成する必要がある - Android は大変
Enjoy Building ! Thank you !
None
Appendix
Copy resources Compile xib Compile asset catalogs
Process package info Precompile Prefix.pch Compile sources Link Process product packaging Sign app Validate app Things under ▶
Things under Initialize mono Load Unity Define
symbols Compile sources Build Player Compile Assets Process IL2CPP Export Xcode project Post process ▶
Points Linker Flags SDK インストール時に要求されることがある Architectures サポート機種 (iPhone
5s 以上など) によって不要なものを削る Xcode environment variables dSYM を外したりなど C++ settings 他 PF 向けビルド設定と合わせるなど Run Script ビルド後の任意スクリプト処理
Problems 実機ビルドを行う場合は設定範囲が Xcode で完結しない ほとんどの項目が project.pbxproj で管理されている
Solution 実機ビルドを行う場合は設定範囲が Xcode で完結しない → Apple Developer Member Center
に関わる設定を PJ 発足初期に出来る限り固めておく ワイルドカードの App ID は非推奨 ほとんどの項目が project.pbxproj で管理されている → 局所的な設定の変更はPJの問題と割り切り汎用化を避ける Provisioning Profile の差し替えなどは対応する
Points Plugins プラグインのビルド設定 Define Symbols Release / Develop
等のビルドターゲット毎に変更する Scripting backend (mono / il2cpp) 開発時はビルドの速い mono にしたい、など External Project Android は Unity のサポートがほぼ皆無 Build Target ターゲット毎のビルド設定変更
Problems ビルドターゲット Xcode 新規バージョン追従 Third party SDK
Android gradle project (外部プロジェクト書き出し)
Solution ビルドターゲット → batchmode でビルドを行う際のパラメータで補完 Xcode 新規バージョン追従 → 待つしかない
どうしても対応が必要な場合は、PJ 個別で該当箇所のみ対応 Third party SDK → 外部プロジェクトからの Java/Obj-C SDK の利用を推奨 Android gradle project (外部プロジェクト書き出し) → Gradle プロジェクトテンプレートを作成した テンプレート上でアプリ固有の設定を編集するように統一