Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
iOSでライブラリを
提供する際に気をつけたいこと
【iOS/Android/AWS/Go】モノづくりにこだわる
3社のアプリやサービス開発の裏側
株式会社ソニックムーブ
坂原 明裕
坂原 明裕
Twitter ID: @asakahara
ブログ: http://sakahara.hatenablog.jp
• 前職ははてな(京都)でiOSエンジニア
• 2015年7月からソニックムーブのエンジニア
• 広島 (地元) -...
ソニックムーブ島根事業所
• 2014年11月から開設
• 松江駅から車で10-15分程度の山の上にあるオフィス
• 現在はエンジニア5名
今日話すこと
• Static Library、Frameworkについて
• FrameworkでBitcodeに対応する方法
• AppStoreへ申請する際の注意点
Libraryの種類
• Xcode 6からCocoa Touch Frameworkが使える
• それ以前はiOSではCocoa Touch Static Libraryのみ
Static Libraryとは
• アプリケーションのコンパイル時に組み込まれる形で(静
的に)リンクされるライブラリ
• コンパイル時に組み込まれるので、その分アプリケーシ
ョンのサイズが大きくなる
• Xcode 5まではiOSではSta...
Frameworkとは
• A framework is a hierarchical directory that encapsulates
shared resources, such as a dynamic shared library...
Frameworkの構造
MyFramework.framework/
MyFramework -> Versions/Current/MyFramework
Resources -> Versions/Current/Resources
Ve...
Embedded Framework
• iOS8、Xcode6から使用可能
• Frameworkを作るのが簡単に(ビルド用のスクリプトなど
必要なくなった)
• App Extensionsを使用するケースなどを想定し、簡単に
複数ターゲッ...
Embedded Frameworkの
注意点
• Deployment Targetを8.0以降にしたアプリにしか組み込めない
• 実際にはSwiftで実装する場合、frameworkのDeployment Targetを
7.0にしておけば...
Universal Framework
• 実機、シミュレータの両方の環境を一つのFrameworkで
サポートする
• New -> Target -> Other -> Aggregate でUniversal
Framework作成用のタ...
#!/bin/sh
UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal
mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"
# ビルドする
xcod...
Bitcodeについて
• iOS9からサポートしておりざっくり言うとApple側でアー
キテクチャに合ったコンパイルをしてくれる
• Archive時以外はBitcodeが埋め込まれない
• xcodebuildコマンドでビルドする場合は別途...
BITCODE_GENERATION_MODEの設定
アプリでBitcodeを有効にするためにはアプリ
使うframeworkも全て対応が必須
AppStoreへ申請する際の注意点
• i386 x86_64がEmbedded Frameworkに含まれていると
申請時にサポートしていないアーキテクチャがあるとし
てエラーになる
• http://www.openradar.me/ra...
不要なアーキテクチャを
削除する際の参考サイト
• Realmではstrip-frameworks.shという専用のスクリプト
を用意している
• https://github.com/realm/realm-
cocoa/blob/d59c8...
まとめ
• iOS8より以前をサポートするならStatic Library(静的
Framework)を使いObjective-Cで実装する
• iOS8以降のサポートでよいならSwiftでEmbedded
Frameworkを使うのが一番手軽...
最後に
島根に興味がある
エンジニアの方を募集してます
ご清聴ありがとうございました
!
iOSでライブラリを提供する際に気をつけたいこと
iOSでライブラリを提供する際に気をつけたいこと
iOSでライブラリを提供する際に気をつけたいこと
iOSでライブラリを提供する際に気をつけたいこと
Upcoming SlideShare
Loading in …5
×

iOSでライブラリを提供する際に気をつけたいこと

19,470 views

Published on

iOSでSDKやライブラリを開発して提供する際の手順が思ったほど整理されていないこともあり、注意点などをまとめて発表した際の資料です。

Published in: Software
  • Hi there! I just wanted to share a list of sites that helped me a lot during my studies: .................................................................................................................................... www.EssayWrite.best - Write an essay .................................................................................................................................... www.LitReview.xyz - Summary of books .................................................................................................................................... www.Coursework.best - Online coursework .................................................................................................................................... www.Dissertations.me - proquest dissertations .................................................................................................................................... www.ReMovie.club - Movies reviews .................................................................................................................................... www.WebSlides.vip - Best powerpoint presentations .................................................................................................................................... www.WritePaper.info - Write a research paper .................................................................................................................................... www.EddyHelp.com - Homework help online .................................................................................................................................... www.MyResumeHelp.net - Professional resume writing service .................................................................................................................................. www.HelpWriting.net - Help with writing any papers ......................................................................................................................................... Save so as not to lose
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

iOSでライブラリを提供する際に気をつけたいこと

  1. 1. iOSでライブラリを 提供する際に気をつけたいこと 【iOS/Android/AWS/Go】モノづくりにこだわる 3社のアプリやサービス開発の裏側 株式会社ソニックムーブ 坂原 明裕
  2. 2. 坂原 明裕 Twitter ID: @asakahara ブログ: http://sakahara.hatenablog.jp • 前職ははてな(京都)でiOSエンジニア • 2015年7月からソニックムーブのエンジニア • 広島 (地元) -> 京都 -> 島根
  3. 3. ソニックムーブ島根事業所 • 2014年11月から開設 • 松江駅から車で10-15分程度の山の上にあるオフィス • 現在はエンジニア5名
  4. 4. 今日話すこと • Static Library、Frameworkについて • FrameworkでBitcodeに対応する方法 • AppStoreへ申請する際の注意点
  5. 5. Libraryの種類 • Xcode 6からCocoa Touch Frameworkが使える • それ以前はiOSではCocoa Touch Static Libraryのみ
  6. 6. Static Libraryとは • アプリケーションのコンパイル時に組み込まれる形で(静 的に)リンクされるライブラリ • コンパイル時に組み込まれるので、その分アプリケーシ ョンのサイズが大きくなる • Xcode 5まではiOSではStatic Libraryしか使えない • 画像やNibなどのリソースを含むことができない
  7. 7. Frameworkとは • A framework is a hierarchical directory that encapsulates shared resources, such as a dynamic shared library, nib files, image files, localized strings, header files, and reference documentation in a single package. • 動的共有ライブラリ、nib、画像、ローカライズファイル 、ヘッダーファイル、ドキュメント等のリソースファイ ルを1つのパッケージにまとめたディレクトリ構造のこ と
  8. 8. Frameworkの構造 MyFramework.framework/ MyFramework -> Versions/Current/MyFramework Resources -> Versions/Current/Resources Versions/ A/ MyFramework Resources/ English.lproj/ InfoPlist.strings Info.plist Current -> A
  9. 9. Embedded Framework • iOS8、Xcode6から使用可能 • Frameworkを作るのが簡単に(ビルド用のスクリプトなど 必要なくなった) • App Extensionsを使用するケースなどを想定し、簡単に 複数ターゲットから参照・利用することができるように なった
  10. 10. Embedded Frameworkの 注意点 • Deployment Targetを8.0以降にしたアプリにしか組み込めない • 実際にはSwiftで実装する場合、frameworkのDeployment Targetを 7.0にしておけば、7.0以降のアプリにも組み込みは問題なくできる • しかし上記設定だとAppStoreへのアップロード時にエラーになる • iOS8より以前をサポートしたい場合、Embedded Frameworkでは なくStatic LibraryをObjective-Cで作成する(Swiftはサポートしてい ない)
  11. 11. Universal Framework • 実機、シミュレータの両方の環境を一つのFrameworkで サポートする • New -> Target -> Other -> Aggregate でUniversal Framework作成用のターゲットを作る • 作成したターゲット -> Build Phases -> +ボタン -> New Run Script Phase でRun Scriptを追加
  12. 12. #!/bin/sh UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal mkdir -p "${UNIVERSAL_OUTPUTFOLDER}" # ビルドする xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build xcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build # iphoneos配下のframeworkをコピーする cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework" "${UNIVERSAL_OUTPUTFOLDER}/" # iphoneos配下のswiftmoduleをコピーする cp -R "${BUILD_DIR}/${CONFIGURATION}- iphonesimulator/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule/." "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule" # lipoコマンドでUniversal binaryを作成 lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}" # プロジェクトフォルダ配下にframeworkをコピー cp -R "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework" "${PROJECT_DIR}"
  13. 13. Bitcodeについて • iOS9からサポートしておりざっくり言うとApple側でアー キテクチャに合ったコンパイルをしてくれる • Archive時以外はBitcodeが埋め込まれない • xcodebuildコマンドでビルドする場合は別途対応が必要 • User-DefinedにBITCODE_GENERATION_MODEをbitcode で設定することでArchive以外でもBitcodeを埋め込める
  14. 14. BITCODE_GENERATION_MODEの設定 アプリでBitcodeを有効にするためにはアプリ 使うframeworkも全て対応が必須
  15. 15. AppStoreへ申請する際の注意点 • i386 x86_64がEmbedded Frameworkに含まれていると 申請時にサポートしていないアーキテクチャがあるとし てエラーになる • http://www.openradar.me/radar?id=6409498411401216 • 対応方法としてはアーカイブ時にRun Scriptでi386 x86_64のアーキテクチャを削除する方法などがある
  16. 16. 不要なアーキテクチャを 削除する際の参考サイト • Realmではstrip-frameworks.shという専用のスクリプト を用意している • https://github.com/realm/realm- cocoa/blob/d59c86f11525f346c8e8db277fdbf2d9ff990d98/scripts/strip- frameworks.sh • 削除方法と削除するためのスクリプトが記載してある記 事 • http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from- dynamic-libraries-in-xcode/
  17. 17. まとめ • iOS8より以前をサポートするならStatic Library(静的 Framework)を使いObjective-Cで実装する • iOS8以降のサポートでよいならSwiftでEmbedded Frameworkを使うのが一番手軽にできる • 可能な限り開発者の負担を下げるためCocoaPods、 Cartago(今後はSwift Package Managerも)で導入できるよ うにするとよい
  18. 18. 最後に
  19. 19. 島根に興味がある エンジニアの方を募集してます
  20. 20. ご清聴ありがとうございました !

×