byClassmethod検索AWSAlexaモバイルビッグデータサーバーレスTableauAlteryxイベントCocoaPodsによる、外部ライブラリの利用と作成2015年12月21日SIN(335)431この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。CocoaPodsとはCocoaPodsとは、定番のCocoaの依存管理マネージャーです。アプリ開発で煩雑となりがちな外部ライブラリの管理を、簡単な記述とコマンドだけ支援するものです。https://cocoapods.org/ざっくりと外観してしまうと・・・CocoaPodsは、Podfileに記述されたライブラリを、メタ情報をもとにダウンロードし、それらをまとめたPodsプロジェクトを生成します。ワークスペースの仕組みを利用して、既存のプロジェクトから、これを参照できるようにしています。以下、動作について詳しく見ていきます。インストールMacには、あらかじめRubyがインストールされているため、下記のコマンドでインストールできます。setupコマンドsetupコマンドで、github上のメタデータ(管理情報)「https://github.com/CocoaPods/Specs」が、ローカルの「~/.cocoapods」に展開されます。setup次の図は、setup実行後に「https://github.com/CocoaPods/Specs/tree/master/Specs」をブラウザで表示したものと、ローカルのディスクを一覧したものの比較です。A2DynamicDelegateそれぞれのライブラリ名の中には、バージョン(実際にはgitのtag)名のフォルダとなっており、その中、下記のようなJSONファイル(ライブラリ名.podspec.json)が置かれいます。次の図は、「Alamofire/3.1.3」の中の「Alamofire.podspec.json」を表示したものです。いうファイルには、ライブラリの入手先(github)や、ビルド方法の定義が入ったメタデータとなっていることが確認できます。CocoaPodsは、このファイルをもとに、ライブラリの管理を行っています。後述するinstallコマンドの実行時に、毎回ローカルの管理情報は更新されるため、setupコマンドをあまり意識する必要はないようです。listコマンドこの管理情報の内容は、listコマンドで一覧することができます。次の例は、Alamofireの情報を確認している様子ですが、「Alamofire」が利用可能なことと、最新バージョンが「3.1.3」であることが分かります。※listコマンドは大量の出力があるためgrep等の併用をお勧めします。ため、ファイルを確認してみると次のようになっています。3.1.3listコマンドは、あくまでもローカルの情報を確認するコマンドであり、github上の最新情報を見るためのものではありません。最初に、既存のプロジェクトに外部のライブラリを組み込む要領について見ていきます。initコマンドXcodeプロジェクトのフォルダの中で、initコマンドを打つと、Podfileの雛形が生成されます。ライブラリ指定この中に、取り込みたい外部ライブラリの情報を記載します。次の例では、「Alamofire」を追加するように指定しています。3.0'endなお、ライブラリの指定方法ですが、単純に最新のバージョンを取得したい場合は、ライブラリ名だけを指定します。'Alamofire'そして、バージョンを指定したい場合は、その後ろにそれを記述します。0.1以降、1.0未満ライブラリの取得先は、管理情報(メタデータ)に従わずに直接指定することも可能です。installコマンドPodfileの設定完了後、installコマンドでライブラリの取り込みが始まります。(この時、xcodeでプロジェクトファイルを開いているとエラーが発生するという情報を見かけますが、現在は、特に問題ないようです。installinstallコマンドが実行されると、プロジェクトのフォルダ内に、Podfile.lock、ワークスペースファイル(.xcworkspace)、そしてPodsフォルダが作成されます。ワークスペースファイルPodfile.lockには、実際に取り込んだバージョンの情報が記載されています。0.39.0Podsフォルダの中には、Podsというプロジェクトがあり、このプロジェクトが取り込んだライブラリと取りまとめ、ワークスペースの機能を利用して既存のプロジェクトから参照される仕組みになっています。updateコマンドライブラリの更新や、Podfileを編集した場合は、updateコマンドを使用します。updateupdateにより、Podfileから削除されたライブラリの削除も行われます。ワークスペースファイル後は、installコマンドで生成されたワークスペースファイル(.xcworkspace)をXcodeから開いて作業を進めます。Sample001.xcworkspacePods/Productsの中のフレームワーク名をimportすることで使用が可能になります。(6)ワークスペース名の指定installlコマンドでワークスペースが作成されますが、その名前は、既存のプロジェクト名と同じになります。」の設定を追加します。Sample001.xcodeproj上記のようなOriginワークスペースに統合したい場合は、下記のように記述します。行のコメント(#)を外すことを忘れないでください。install」で復活できるため、「Pods」を.gitignoreに記載して、Podsフォルダを管理外にすることができます。この方法は、復活のためにCocoaPodsのインストールが必須となるなど、一概にメリットだけとは言えないので、それぞれの状況で検討が必要です。install」で生成されますが、こちらは、実際に使用されているバージョンを管理しているものですので、管理外とすることはできません。次に、自ら作成したフレームワークをCocoaPodsで管理する要領について見ていきます。手順として、「(1)ライブラリの作成」ー「(2)Demoプロジェクトの作成」という順になっている理由は、最終的に公開するトップのフォルダに、ライブラリのプロジェクトファイルが配置されるようにするためです。Framework」を選択し新しいプロジェクトを作成します。Fileを追加します。(名前は、「MyLib.swift」としました)MyLib.swiftには、ライブラリの機能として、次のような簡単なメソッドを1つだけ定義しました。続いて、動作を確認できるように、ライブラリを使用する側のプロジェクトとして「Demo」という名前のプロジェクトを作成します。Application」を選択し新しいプロジェクトを作成します。(ここでは、名前を「Demo」としました)この時点で、XcodeのProjectナビゲータでは、次のような配置になっています。Binaries」に追加します。「+」をクリックして表示されたダイアログでは、「MyLib.framewokriOS」を選択します。追加が完了すると、次のようになります。この時点で、Demoプロジェクトから利用が可能になっています。ターゲットを「Demo」に変更して、シュミレーターで実行してみてください。start..」が出力されることを確認できます。次にこのライブラリをGithub上に置くために、新しいリポジトリを作成します。この時、ライセンスや、READMEのファイル作成もチェックしてgithubに雛形の生成をお願いしましょう。この時点でGithub上にリポジトリを作成する理由は、次に作成するpodspecファイルの「検証」で必要なためです。podspecファイルCocoaPodsに管理させるためには、podspecファイル(メタ情報)が必要です。MyLibのプロジェクトファイルが存在するフォルダで次のコマンドを打つと、podspecファイル(名前は、ライブラリ名.podspecとなります)の雛形が生成されます。MyLib.xcodeproj後は、このファイルを編集しますが、今回編集した内容は次のとおりとなりました。ライブラリの取得先は、先ほど作成したGithubになっています。'MyLib/**/*.{h,m,swift}'endpodspecファイルの各項目の内容は次のようになっています。ライブラリで実際に使用するファイルのパスなお、詳しくは、公式のドキュメントをご参照ください。編集が終了したら、チェックを行います。validation.」が表示されたらOKです。下記の例では、LICENSEファイルがないという警告が表示されていますが、これは、Github上で先ほど雛形を生成したので、マージした時点で問題なくなります。Githubへの公開Githubへの公開は、次のとおりです。タグをGithubへのpushマージが終了すると、Github上でtag「0.0.1」で現在の状態が取得できます。使用してみるそれでは、今Github上に置いたライブラリを使用してみます。外部ライブラリの使用方法」のところで紹介した要領そのままです。Podfileの内容は、次のとおり。'https://github.com/furuya02/MyLib.git'endまた、installしている様子は、次のようになっています。installed.Podsプロジェクトの中に組み込まれた「MyLib」を利用できることを確認できます。再インストールCocoaPods自体の更新は、次のコマンドで可能です。cocoapodsなお、再インストールは次のようになります。管理情報のフォルダを削除してしまって、setupコマンドで最新情報をダウンロードできます。プロジェクト内での再構築プロジェクト内では、Podsフォルダの中にすべての外部ライブラリが入っているので、これを削除して、updateコマンドを使用すると、Podfileの指定に基づいてライブラリが再構築されます。update(4)CocoaPodsをプロジェクトから削除する方法Podfile、Podfile.lock、Pods、.xcsorkspaceを削除して、プロジェクトファイルから開きます。Sample001.xcodeproj/ツリーの中で、Pods等不要なファイルを削除します。この時点でBuildすると、次のようなエラーが発生します。Phases」で次の2つを削除する必要があります。[2015.12.22追記]チーム開発などで、個々の利用しているCocoaPodsのバージョンに相違があって問題となることがあります。ここでは、バージョンを統一する要領について紹介します。グローバルのバージョン管理グローバルにインストールされているCocoaPodsのバージョンを任意のものにするには、一旦削除して、バージョンを指定したインストール行うしかありません。ローカルのバージョン管理Bundlerを使用すると、プロジェクト内にCocoaPodsの特定のバージョンを組み込むことができます。Bundlerとは、Rubyのライブラリ管理ツールです。ここでは、Bundlerのセットアップが完了している前提で進めています。まとめ今回は、定番ツールであるCocoaPodsの利用方法について、外部ライブラリを「利用する立場」と、「作成する立場」の2つの方向でまとめてみました。当初、「Swiftには対応していない」とのことでしたが、現時点では、全く問題なく利用できることを改めて確認できました。3,356,995CX事業本部の平内です。最近は、音声で操作するアプリの開発を担当させて頂いてます。〜iOS7についての考察とfladdictデザイン論〜」に参加してきました。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。カフェ店長のオカノです。今日はオフィスに用があるので、通勤ラッシュを避けて出社しました。この子は新メンバーのさめくんです。在宅勤務が推奨されているのでオフィスが閑散としており、すこしさみしそうです。使いたいときの注意点を書きました。本が出ていたので読んでみたところよかったので紹介させていただきます。