來源:http://www.myexception.cn/operating-system/1451490.htmlhtml
開發QQ互聯ios版Ane擴展 辛酸史java
開發QQ互聯ios版Ane擴展辛酸史:android
一、安裝mac系統很是痛苦,找了好幾個版本都裝不上,同時對mac的基本操做和xcode的基本操做不熟悉。ios
二、用xcode創建ane項目(使用xcode-template-ane-master模板),引入第三方object-cframework,生成.a文件,供windows下生成ane文件。git
發現windows下 調用第三方sdk後編譯的ane,air調用打包時卡住(緣由有兩種,一是object-C項目代碼有錯誤,但可正常生成.a庫文件;二是引用了第三方framework,但未配置platform.xml打包進ane中,讀取不到第三方sdk)。github
解決辦法:先排除引用第三方類庫問題,再排查代碼(只好對懷疑的地方註釋掉在編譯.a,生成ane再打包)vim
排查完錯誤後,編譯不卡住了,但仍舊打包時報錯:windows
|
三、經過配置platform.xml解決上面這個錯誤(在linkerOptions屬性中添加引用的第三方類庫)。
windows下從新打包生成ane,air項目運行打包報錯:
緣由是打包時adt會去讀取該第三方類庫,讀取不到。須要在fb中本機擴展處配置Apple iOS sdk(由於iossdk沒有windows版,所以須要把fb項目放入mac上運行,進入第4點)
注意<linkerOptions> 標籤須要 AIR 3.3 或更高版本
四、在mac上安裝fb,配置好air項目,在本機擴展中配置Apple iOS sdk:
/Applications/Xcode2.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/
而且把第三方類庫TencentOpenAPI.framework 放入上面路徑中System/Library/Frameworks/下,在xcode中導入相關須要的ios類庫
再運行提示
ld: librarynot found for -libiconv
Compilationfailed while executing : ld64
緣由是linkerOptions ios的類庫名字錯誤,命名-libiconv 要寫成 -liconv(必須去掉ib兩個字符)
配置完成後從新在windows中打包ane,air項目運行終於ok,調用第三方程序運行正常。Platformoptions.xml配置以下:
五、由於不想把項目放在mac上編譯,所以須要在ane上想辦法,把第三方framework打包進ane中(這就要求ane打包過程必須在mac上完成)
藉助 platformoptions.xml裏面配置packagedDependencies節點屬性把第三方類庫配置進去
使用命令行打包ane提示錯誤:Missing dependency TencentOpenAPI.frameworkfor platform iPhone-ARM
platformoptions.xml裏面配置了packagedDependencies節點屬性---引用了第三方類庫,須要把這個類庫放到打包的文件夾下
注意<packagedDependencies> 標籤須要 AIR 3.5或更高版本。
再使用 adt 打包ane,報錯:Unable to build a valid certificate chain for the signer.
多是mac上使用windows 生成 .p12文件不支持致使的。
網上有個方法說在mac上使用firefox怎樣從新生成.p12(http://forums.adobe.com/message/1975832#1975832)未徹底明白怎麼操做,仍是老老實實用mac來生成.p12文件用於ane生成和ipa發佈。
這樣爲第三方framework生成的ane文件 就可供widows上的 air項目使用了,並不須要在mac上開發建項目引入ios sdk。
六、爲QQ互聯sdk寫ane,發送消息沒法回調,由於 object-c部分要重寫handleOpenURL方法,而air app自動建立的窗口沒法重寫這個方法。
解決辦法:a s上偵聽 InvokeEvent.INVOKE事件,收到事件後再經過ane調用 object-c方法,裏面再調用sdk的handleOpenURL方法。
NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, onInvoke); private function onInvoke( event : InvokeEvent ) : void { if (Capabilities.manufacturer.indexOf("iOS") != -1)//只在ios下采用這種方式 { if (event.arguments != null && event.arguments.length > 0) { var url:String = event.arguments[0] as String; if ( url != null && url.indexOf("tencent") == 0) { contex.call("handleOpenURL", url); } } } }
七、qq互聯登陸成功後客戶端把openid、access_token傳遞給服務端訪問開放平臺api提示100030 錯誤:用戶沒有對該api進行受權
一開始覺得是openid和access_token錯誤,實際緣由是 authorize傳遞的參數問題,沒有填寫該api的權限字符串,可加上或者傳 @"all"。每一個權限的字符串就是調用的哪條cgi的fun 譬如:https://graph.qq.com/user/get_app_friends權限字符串就是:get_app_friends。
八、其餘小插曲,一開始安裝了flash builder4.7,配置最新的air3.9,項目編譯報錯:提示: 「在源路徑中找到的文件必須擁有一個外部可見定義。若是文件中的某個定義應當是外部可見的,請將該定義放入包。」
「AIR 應用程序 ID「net.flash8.game.guess.debug」與在配置概要文件中指定的模式「net.flash8.game.guess」不匹配。請更改應用程序 ID,或使用與現有ID 相匹配的配置概要文件。」
沒找到緣由,因而又安裝flashbuilder4.6,配置最新的air3.9,後正常。
Mac下升級airsdk的方法:(和windows下升級方法相同,mac中fb4.7比較複雜)
http://www.vimer.cn/2013/07/mac下flash-builder-4-64-7-升級-airsdk的版本至3-8的方法.html
xcode出現錯誤Unsupported compiler 'GCC 4.2'selected for architecture 'i386'
解決方法 在Buildingsetting 找到Compiler for C/C++/Objective-C 這項 選擇LLVM GCC 4.2就OK
xcode出現錯誤:
Undefined symbolsfor architecture armv7:
「_OBJC_CLASS_$_XXX」,referenced from:
objc-class-ref inXXX
ld: symbol(s) notfound for architecture i386
clang: error:linker command failed with exit code 1 (use -v to see invocation)
若是真機調試就是undefined symbols for architecture i386錯誤!
發生這種錯誤一般是project.pbxproj這個文件引發的,尤爲在多人合做開發的時候,svn提交不規範可能致使project.pbxproj發生錯誤,致使文件的引用不在project.pbxproj文件中。
xcode項目import文件會根據project.pbxproj來查找,查找不到文件的引用則會有上述的錯誤。
解決方法點擊工程,在主界面中點擊BuildPhases,根據提示信息「XXX」來判斷缺乏什麼文件,通常若是缺乏自定義的文件,XXX會是缺乏的類名,那麼就在Complie Sources中加入該文件。若是缺乏類庫,則在Link Binary With Libraries中加入該類庫。
xcode 有時編譯不出.a文件,但仍提示buildsuccess,這種狀況大可能是代碼有誤,從新新建一個工程,把代碼拷過去。(只在xcode 4.6上遇到,後面果斷安裝最新xcode5.0)
命令行打包ane提示錯誤:Namespace of platformoptions.xml should match extension namespace.
platformoptions.xml裏面的air版本號配置必須和extension.xml裏面一致,同時,打包ane用到的air sdk版本必須大於或等於改版本號。
遇到上面這些問題,並解決後,終於把QQ互聯的iso版ane開發完成、並調通調用。期間中途受阻,還研究了下別人寫的一個QQ互聯的ane看能不能直接拿來用,最終發現不支持,還得本身開發。
概括步驟:
一、配置開發環境(mac、xcode,熟悉他們的用法)
二、建立xcode工程(建議使用xcode-template-ane-master),導出.a庫文件
三、建立As commonAneLib工程,編寫ane命令並打包
四、配置-app.xml權限(很重要)
五、air項目工程調用
參考的相關網站:
構建本機庫:
http://help.adobe.com/zh_CN/air/extensions/WSf268776665d7970d-2e74ffb4130044f3619-7fff.html#WSdb11516da818ea8d49ce0fe713341ed67cf-7ffe
應用程序啓動和退出選項
http://help.adobe.com/zh_CN/AIR/1.1/devappsflex/WS5b3ccc516d4fbf351e63e3d118676a5d46-8000.html
構建針對 iOS 和 Android 的原生擴展 – 第三部分: 構建 iOS 庫
http://www.adobe.com/cn/devnet/air/articles/building-ane-ios-android-pt3.html
iOS5support for AIR/Using external SDKs to package apps:
http://blogs.adobe.com/rajorshi/2011/11/16/ios5-support-for-airusing-external-sdks-to-package-apps/
使用ANE整合Facebook http://zengrong.net/post/1831.htm
Adobe AIR打包用到外部sdk的ANE時報錯
http://www.flashj.cn/wp/error-when-adt-package-ipa-with-ane-includes-ios-external-sdk.html
IOS ANE的坑爹之路(一)http://rolfzhang.com/articles/1108.html
ANE-Facebook:https://github.com/freshplanet/ANE-Facebook
ANEList-master:https://github.com/zmLiu/ANEList