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
About triangle
Search
Smith
February 21, 2017
Programming
69
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
About triangle
This slide presents processes inside of triangle (build button) focused on Unity and Xcode.
Smith
February 21, 2017
More Decks by Smith
See All by Smith
Zig なんもわからん 〜あるいは学びのモチベーション〜
dolow
0
380
Go に Generics がやってきた
dolow
0
600
NFT つくってみた
dolow
0
250
プロのエンジニアが1人日を捻出してレトロJRPGっぽいゲームを本気で作った
dolow
0
850
技術中間組織はじめました
dolow
0
100
Cipher.Mobile
dolow
0
94
Develop::Client::Game
dolow
1
40
Other Decks in Programming
See All in Programming
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
230
テーブルをDELETEした
yuzneri
0
140
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
180
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
200
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.2k
FDEが実現するAI駆動経営の現在地
gonta
2
280
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
430
源内ハンズオン概要編
hideg
0
160
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
120
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
140
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
770
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
650
Featured
See All Featured
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
660
Being A Developer After 40
akosma
91
590k
Why Our Code Smells
bkeepers
PRO
340
58k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
210
Unsuck your backbone
ammeep
672
58k
Ethics towards AI in product and experience design
skipperchong
2
340
Navigating Weather and Climate Data
rabernat
0
470
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
330
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
430
Making Projects Easy
brettharned
120
6.7k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Crafting Experiences
bethany
1
250
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 プロジェクトテンプレートを作成した テンプレート上でアプリ固有の設定を編集するように統一