APIのiOSのANEを作ろうとしてplatform.xmlでハマったところ2014/03/18こんにちは。仕事で、ANE作りは何個か作ったことがあってなんとなくわかったつもりだったんだけど、やっぱりわかってなくてすごく時間がかかった件についてです。ANE作っている人はネットで検索してもあんまりいないけど、作る人は情報が合った方が助かると思うので書きます。APIのANEを作ろうとしたときのことです。Dropboxこういう外部のライブラリを使うときは、adtコマンドに組み込むplatform-options.xmlみたいなxmlを作る必要があります。細かい説明に入る前に、コンパイル、リンクなどを前に買ってあった入門書などで読み直してみました。マシン語に変換済みのライブラリのオブジェクトファイルと1のオブジェクトファイルを結合する必要がある。リンク済みなので、実行可能なプログラムのできあがり!という感じの流れです。link)の2種類がある。loadというのもあったけどここでは置いておく)静的リンクは、リンク時にライブラリのオブジェクトを自分のプログラムに埋め込む。optionsの各値の説明を見てみるlinkerOptionsこの方法でリンクされた依存関係は、ネイティブ拡張をネイティブ拡張自体とは別に使用する開発者に配布される必要があります。デフォルトではリンクされません。このオプションを使用して、別に提供する静的ライブラリに開発者がリンクできるようにすることもできます。ANEを作ってもANEの中にはライブラリは埋め込まれないです。動的か静的かはライブラリによると思う、、。(不確か、、)最終的にAIRのコンパイル時に、静的ライブラリは埋め込まれると思われ。いずれかの拡張子を持つ静的ライブラリである必要があります。アーキテクチャをサポートする必要があります。書いてあって、こっちは静的リンクです。ANEを作ったら中に埋め込まれます。zipにして中をみていくと、ライブラリが見つかりました。CFNetwork</option>とかって書いていく必要があるのかなって思ったのだけど、adobeの説明文ではいくつかデフォルトでリンクされるやつがあるから大丈夫と書いてあった。すると書く必要があるのは、libc++.dylibだけとわかった。ibを抜かして書くので、-lc++と書く必要がある。それで、できたios_options.xmlはこんな感じになった。libc++はFinderからひっぱってきてどこかに置く必要はなかったです。</packagedDependencies></platform>packagedDependencyの中のiosLibというフォルダは自分で作ったものです。adtのコマンドはこんな感じになった。${xxx}とか書いてあるのは、これはaneを作るときのシェルスクリプトの一部だからです。その部分は変数で、その前にxxx=”foo”とか書いておくと${xxx}が実行時にfooと置き換わるのです。あと各行末の\は、改行を無効化するために書いてあります。この\をとっぱらって1行でつなげて書いても動きます。やって書くと、みづらいので\をつけて書いています。ちなみに、これを作るときにXCode側でこれ用の静的ライブラリ(.aファイル)を作る必要がある。そのときのライブラリの設定はlibc++は抜かしておくみたい。いれてたら、「それ動的ライブラリだから静的ライブラリにひもづけられないよ」という警告がでたのではずしました。iOS側はなんとかなりそうなんだけど、Android側がなー、、、。LINEスタンプ作りました!毎日使える。プログラミングこのブログについてこんにちは。フロントエンドエンジニアです。自作のiPhoneアプリを作っています。