この記事は全4回の「Parse AnalyticsのiOSのANEを作りたい!」シリーズの1つです。
[AS3] Parse AnalyticsのiOSのANEを作りたい! 準備編
[AS3] Parse AnalyticsのiOSのANEを作りたい! Static Library編
[AS3] Parse AnalyticsのiOSのANEを作りたい! ActionScript編
[AS3] Parse AnalyticsのiOSのANEを作りたい! ANEビルド編 << イマココ!
—
こんにちは。きんくまです。
ようやくANEのビルドまで来ました。
完成品のリンクはこちらです。
>> KinkumaDesign/ParseAnalyticsANE
ANEのビルドはAIR sdkに入っているadtというツールで行います。
でもその前に、設定ファイルを書く必要があります。それに関連して以前に書いたリンクはこちらです。
>> [AS3 / ANE] Dropbox Sync APIのiOSのANEを作ろうとしてplatform.xmlでハマったところ
それではまずはiOS用の platform options ファイルを見てみます。
ios_options.xml
<platform xmlns="http://ns.adobe.com/air/extension/4.0"> <linkerOptions> <option>-ios_version_min 6.0</option> <option>-lz.1.1.3</option> <option>-framework StoreKit</option> </linkerOptions> <packagedDependencies> <packagedDependency>iOSLib/Parse.framework</packagedDependency> </packagedDependencies> </platform>
前の記事で使っているライブラリを書きました。
ただ、ANE用のStaticLibararyではDynamicLibraryを抜かしてこうやってビルドしました。
ここで ios_options.xmlを見ていただくとわかるのですが、linkerOptionsの項目に抜かしたDynamicLibraryのlibzが入っています。
本来は libz.1.1.3.dylib という名前なのですが、それが lib の ib と、最後のdynlibを抜かして
lz.1.1.3という名前でリンクされます。
また、その他のframeworkのうち、Adobeがデフォルトでリンクしているものは抜かしてかけばよいので、ひとつずつチェックしていくと、StoreKitのみを入れればよいことがわかったので、それのみリンクの設定を書いてあります。
>> iOS ネイティブライブラリ
それで、ios_options.xmlのpackagedDependenciesの項目には、iOS標準ではないサードパーティ製のライブラリを入れます。
今回はParseなので、ParseSDKをリンクしました。また、サードパーティ製の.ライブラリはiOSには標準で入っていないので、ANEを作る際に同梱する必要があります。なので、buildフォルダの中にiOSLibフォルダを作ってその中に置きました。
iOS標準のものである、libzやStoreKitはbuildフォルダには入れる必要はないです。
extension.xml
つぎにextension.xmlをみていきます。
<?xml version="1.0" encoding="utf-8" ?> <extension xmlns="http://ns.adobe.com/air/extension/4.0"> <id>com.kumade.ane.parse.analytics.extension</id> <versionNumber>1.0.0</versionNumber> <platforms> <!-- <platform name="Android-ARM"> <applicationDeployment> <nativeLibrary>xxx.jar</nativeLibrary> <initializer>xxxxx</initializer> </applicationDeployment> </platform> --> <platform name="iPhone-ARM"> <applicationDeployment> <nativeLibrary>libParseAnalyticsANEiOS.a</nativeLibrary> <initializer>ParseAnalyticsAneExtensionInitializer</initializer> <finalizer>ParseAnalyticsAneExtensionFinalizer</finalizer> </applicationDeployment> </platform> <!-- <platform name="iPhone-x86"> <applicationDeployment> <nativeLibrary>libParseAnalyticsANEiOS.a</nativeLibrary> <initializer>ParseAnalyticsAneExtensionInitializer</initializer> <finalizer>ParseAnalyticsAneExtensionFinalizer</finalizer> </applicationDeployment> </platform> --> <platform name="default"> <applicationDeployment/> </platform> </platforms> </extension>
まず、Android-ARMとiPhone-x86のコメントアウト部分ですが、今回はそれように作っていないので、コメントアウトしています。消してもよかったのですが、参考までに残してあります。iPhone-x86はmac上で動くiOSシミュレータアプリ用の設定になります。Static Libraryのときに、iOS Deviceでビルドすると書いたと思うのですが、もしあのときシミュレーターでビルドすれば、このiPhone-x86で使えるようになります。
あとは、iPhone実機用のiPhone-ARMとその他用のDefaultの設定となります。
ここまで書けばあとはビルドするだけです。
ちなみに、私の場合このANEづくりをはじめるときまでx86とかarmとかあまり意識したことなかったのですが、CPUの種類です。x86はmacやwindowsなど主にPC上で動いているのもの。(Core i7とか) ARMは主にスマホなどのモバイル端末で使われているCPUです。CPUの種類が変わると、そのCPU向けにビルドしてあげないとうまく動いてくれません。。なので、iOS実機用のiPhone-armと、mac上で動くiOSシミュレーター用のx-86が分けてあります。(iOSシミュレーターはmacのCPU = x86で動いているので)
ビルドする
ビルドは手動でやると、ちょっと面倒です。ANEを作り始めた最初の頃は、手動で何回もやっていたのですが、すごく面倒くさくなったので、シェルスクリプトでやるようになりました。
手動でやるとわかるのですが、やっていること自体はそんなに難しくなくて、ファイルをコピーしてきたり、zipを圧縮・解凍してということを繰り返すことがメインになります。
それで作ったものがこれです。
build.sh
#!/bin/sh #===================== # settings #===================== #ANE's name ANEName="KKParseAnalytics.ane" #build directory buildDir="build" #ActionScript directory and file ASLibBinDir="ParseAnalyticsANEAS/bin" ASLibSwcName="ParseAnalyticsANEAS.swc" #default directory and file DefaultBinDir="ParseAnalyticsANEDefault/bin" DefaultSwcName="ParseAnalyticsANEDefault.swc" #Ane directory in test project TestAneDir="ParseAnalyticsANETest/ane" #iOS static library directory in build directory iOSDir="Release-iphoneos" #iOS static library for simulator in build directory #iOSSimDir="Release-iphonesimulator" #iOS library(Third party) iOSLib="iOSLib/Parse.framework" #Android Project #AndroidDir="xxxxx" #Android directory in build directory #AndroidBuildDir="android" #directory for copy #AndroidRes="res" #path for adt tools adt="/Applications/Adobe Flash Builder 4.7/eclipse/plugins/com.adobe.flash.compiler_4.7.0.349722/AIRSDK/bin/adt" #working directroy(you don't have to change it) WorkingDir="workingdir" #===================== # copy AS lib mkdir ${WorkingDir} cp -f ${ASLibBinDir}/${ASLibSwcName} ${buildDir} cp ${ASLibBinDir}/${ASLibSwcName} ${WorkingDir} unzip -o ${WorkingDir}/${ASLibSwcName} -d ${WorkingDir} #cp -f ${WorkingDir}/library.swf ${buildDir}/${AndroidBuildDir} cp -f ${WorkingDir}/library.swf ${buildDir}/${iOSDir} #cp -f ${WorkingDir}/library.swf ${buildDir}/${iOSSimDir} rm ${WorkingDir}/*.* # copy default cp ${DefaultBinDir}/${DefaultSwcName} ${WorkingDir} unzip -o ${WorkingDir}/${DefaultSwcName} -d ${WorkingDir} if [ ! -e ${buildDir}/default ]; then mkdir ${buildDir}/default fi cp -f ${WorkingDir}/library.swf ${buildDir}/default # clean up rm -r ${WorkingDir} # copy android res directory #if [ -e ${buildDir}/${AndroidBuildDir}/${AndroidRes} ]; then # rm -Rf ${buildDir}/${AndroidBuildDir}/${AndroidRes} #fi #cp -Rf ${AndroidDir}/${AndroidRes} ${buildDir}/${AndroidBuildDir} # build cd ${buildDir} #adt command ======== "$adt" -package \ -target ane ${ANEName} extension.xml \ -swc ${ASLibSwcName} \ -platform iPhone-ARM \ -platformoptions ios_options.xml \ iOSLib/Parse.framework \ -C ${iOSDir} . \ -platform default \ -C default . #below comment out code is tempolary. not used. #-platform Android-ARM \ # -platformoptions android_options.xml \ # -C android . \ #-platform iPhone-x86 \ # -C ${iOSSimDir} . \ #================ cd ../ # copy to test directory cp -f ${buildDir}/${ANEName} ${TestAneDir} exit 0
このスクリプト自体他のANEを作るときに使い回しているので、AndroidとiOSシミュレータ用がコメントアウトして入っています。使い回すときは上の方のsettingsを書き換えて、下のadtコマンドあたりをいじるだけでやっています。
このスクリプトの内容的には、さっき書いたようにファイルのコピーやzipの操作をして、adtコマンドでビルドするというものになります。
シェルスクリプトを使うときは、そのフォルダまでcdコマンドで移動したあとに、まず実行権をつけてあげます。
chmod 707 build.sh
とやります。
ls -l
とやると、こんな感じになりました。
% ls -l total 16 drwxr-xr-x 8 kinkuma staff 272 7 30 13:56 ParseAnalyticsANEAS/ drwxr-xr-x 2 kinkuma staff 68 7 30 12:01 ParseAnalyticsANEAndroid/ drwxr-xr-x 8 kinkuma staff 272 7 30 13:58 ParseAnalyticsANEDefault/ drwxr-xr-x 8 kinkuma staff 272 7 30 13:59 ParseAnalyticsANETest/ drwxr-xr-x 7 kinkuma staff 238 7 30 12:04 ParseAnalyticsANEiOS/ -rw-r--r--@ 1 kinkuma staff 271 7 30 18:55 README.md drwxr-xr-x 10 kinkuma staff 340 7 30 18:43 build/ -rwx---rwx@ 1 kinkuma staff 2508 7 30 18:26 build.sh*
build.sh が rwx—rwx となっていて、xがついているので、実行権がついているのがわかります。
これで、スクリプトとして実行できるので、コマンドをうちます。ファイル名の頭に ./ をつけるのをお忘れなく。
./build.sh
とやるとビルドがはじまり、時間がちょっとかかるのですが、無事に終わるとbuildフォルダ内に KKParseAnalytics.ane というANEができています。
こんな感じにシェルスクリプトにすると、何かANEの修正や変更が入ったときもコマンド一発でできるようになるので便利です。ターミナル上で、コマンドはカーソルの↑(上)を押せばコマンドの履歴が出るので、上+Enterでできあがるようになります。
あとANEをテストするためのテストプロジェクトを事前に作っておけば、build.shの最後でそのプロジェクトのaneフォルダに作ったaneファイルが上書きコピーされます。
テストプロジェクトを実機で動かすとこんな感じの青い四角が出てくるので、ぽちぽち押します。
それで、ParseのDash boardをみるとグラフがあがっていくのが確認できると思います。
というわけでParse AnalyticsのiOSのANEを作る説明はおしまいです。
長い間お疲れさまでした!
■ 自作iPhoneアプリ 好評発売中!
・フォルメモ - シンプルなフォルダつきメモ帳
・ジッピー電卓 - 消費税や割引もサクサク計算!
■ LINEスタンプ作りました!
毎日使える。とぼけたウサギ