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でのFramework導入のおさらい #関モバ

9,703 views

Published on

関西モバイルアプリ研究会 #4での発表スライドです。

Published in: Engineering
  • Be the first to comment

iOSでのFramework導入のおさらい #関モバ

  1. 1. iOSでのFramework導入のおさらい @ikesyo 関西モバイルアプリ研究会!#4,!2015)07)21!Tue #関モバ
  2. 2. @ikesyo !ikesyo_nnid いけしょー/池田翔 京都でフリーランスのiOSエンジニア (時々Android)しています 現在はフリュー㈱のモバイル開発の チームにジョイン中。 Swi$/Reac*veCocoaで書いています。
  3. 3. Reac%veCocoa/Carthageの コミッター(Collaborator)やってます2✨
  4. 4. HimotokiというJSONデコーダーを作ってます • GitHub • SlideShare
  5. 5. ⛵!世はSwi%/Dynamic!Framework時代!⛵
  6. 6. 私、iOS$7のサポートを切れるようになったら Frameworkでライブラリを導入するんだ。$!
  7. 7. でもXcode&4/5の時代からのプロジェクトに どうやったらFrameworkを導入できるの?&!
  8. 8. Frameworkの導入方法 • !"CocoaPods((>=(0.36) • ""Carthage • #"CocoaSeeds(for(iOS(7
  9. 9. 1.#CocoaPods • みんな大好きCocoaPods先生 • 0.36から-use_frameworks!-というオプションでFrameworkの導入に 対応 • CocoaPods-0.36-4-Framework-and-Swi8-Support-4-CocoaPods-Blog • 一番簡単です # Podfile use_frameworks! pod "Alamofire", "~> 1.2.0"
  10. 10. 1.#CocoaPods 後はソース内で!import!するだけ import Alamofire Alamofire.request(.GET, "http://httpbin.org/get")
  11. 11. 2.#Carthage • CocoaPodsのブラックボックス感が好きじゃないという人に • 依存性管理・ビルドはしてくれるけどプロジェクトへの組み込みは自分で 設定する • 名前の由来は“パッケージ(Package)”と発音が似てるから(英語の発音はカ ーセッジみたいな感じです) • [Ques3on]6Why6name6Carthage?6<6Issue6#549 I6suggested6“Carthage,”6because6it’s6vaguely6like6“package”6with6some6 consonants6swapped6out.
  12. 12. 2.#Carthage • Cartfileで依存ライブラリを定義したら$ carthage updateで ライブラリを取得、ビルド • Carthage/Build/iOSにFrameworkができあがっている # Cartfile github "Alamofire/Alamofire" ~> 1.2.0
  13. 13. 2.#Carthage • Xcodeのターゲット設定の“General”./>.“Linked.Frameworks.and. Libraries”に各.frameworkをドラッグ&ドロップ • Xcodeのターゲット設定の“Build.Phases”の+アイコンから“New.Run. Script.Phase”を選択し、スクリプトの中身として以下をペースト /usr/local/bin/carthage copy-frameworks してから“Input.Files”に各Frameworkのパスを追加する $(SRCROOT)/Carthage/Build/iOS/Alamofire.framework
  14. 14. ここで注意点 • “Framework+Search+Paths”+(FRAMEWORK_SEARCH_PATHS) • Xcode+6では.frameworkをドラッグ&ドロップ時にパッケージのあるディレ クトリのパスが追加されるが、Xcode+7+beta+3時点では追加されないように なっている(バグ?)ので、自分で $(SRCROOT)/Carthage/Build/iOS を追加する必要がある。 • Linker+Error+:+Library+not+found+D+Issue+#615+D+Carthage/Carthage • Carthage+install+documentaMon+missing+step?+D+Issue+#347+D+Quick/Quick
  15. 15. ここで注意点 • “Runpath*Search*Paths”*(LD_RUNPATH_SEARCH_PATHS) • Xcode*6以降で作成したプロジェクト、ターゲットの場合は設定 済みだが、それ以前からのプロジェクトの場合は設定されてい ない(かもしれない)。その場合は $(inherited) @executable_path/Frameworks を追加する必要がある。 • Linker*Error*:*Library*not*found*@*Issue*#615*@*Carthage/Carthage
  16. 16. ここで注意点 • “Embed(Frameworks”(ビルドフェーズ • “Build(Phases”に該当のフェーズがない場合(これもXcode(6以前からのプロジェクトの場 合?)、+アイコンから“New(Copy(Files(Phase”を選択し、 • “Des@na@on”に“Frameworks”を選択 • リストに各Frameworkを追加して“Code(Sign(On(Copy”にチェックを入れる 必要がある。 • Linker(Error(:(Library(not(found(I(Issue(#615(I(Carthage/Carthage • Library(not(loaded:(@rpath/Alamofire.framework/Alamofire(I(Issue(#616(I(Carthage/Carthage
  17. 17. !!Dynamic!Frameworkの設定方法に 詳しくなれましたね!!
  18. 18. でもまだiOS$7のサポート 切れないんだけど……$!
  19. 19. そんなあなたに!!
  20. 20. 3.#CocoaSeeds)for)iOS)7 • devxoul/CocoaSeeds Git$Submodule$Alterna1ve$for$Cocoa.$Inspired$by$CocoaPods. • CocoaPodsみたいにプロジェクトへの組み込みを行うが、ソースファイルを追 加してアプリと一緒にビルドする)=>)iOS)7でもSwi1のライブラリが使える)✨ • @usamik26)がさっそくPRしてます)" • Adapt)for)mul?ple)files)op?on)by)usamiEk)F)Pull)Request)#13 • 他のFrameworkに依存して)import FooBar)しているライブラリだと困る。
  21. 21. 3.#CocoaSeeds)for)iOS)7 • $ [sudo] gem install cocoaseeds • 以下のようにSeedfileを定義して # Seedfile # seeds for all targets github "Alamofire/Alamofire", "1.2.0", :files => "Source/*.{swift,h}" # seeds for specific target target :MyAppTest do github "Quick/Quick", "v0.3.1", :files => "Quick/**.{swift,h}" end • $ seed install
  22. 22. !!快適なFrameworkライフを お過ごし下さい!"
  23. 23. 参考URL • Run%Path*Dependent*Libraries • Xcode*%*Library*not*loaded*エラー?ここを見直そう*%*Qiita • mikeash.com:*Friday*Q&A*2009%11%06:*Linking*and*Install* Names • @executable*path,*@load*path*and*@rpath*L*wincent.com
  24. 24. Ques%ons❓
  25. 25. ありがとうございました!

×