開發QQ互聯ios版Ane擴張 辛酸史

來源:互聯網
上載者:User

標籤:android   des   style   blog   http   java   

來源:http://www.myexception.cn/operating-system/1451490.html

開發QQ互聯ios版Ane擴充 辛酸史

開發QQ互聯ios版Ane擴充辛酸史:

1、安裝mac系統非常痛苦,找了好幾個版本都裝不上,同時對mac的基本操作和xcode的基本操作不熟悉。

2、用xcode建立ane項目(使用xcode-template-ane-master模板),引入第三方object-cframework,產生.a檔案,供windows下產生ane檔案。

發現windows下 調用第三方sdk後編譯的ane,air調用打包時卡住(原因有兩種,一是object-C項目代碼有錯誤,但可正常產生.a庫檔案;二是引用了第三方framework,但未配置platform.xml打包進ane中,讀取不到第三方sdk)。

解決辦法:先排除引用第三方類庫問題,再排查代碼(只好對懷疑的地方注釋掉在編譯.a,產生ane再打包)

排查完錯誤後,編譯不卡住了,但仍舊打包時報錯:

打包應用程式時出錯:

 Undefined symbols for architecture armv7:

  "_qqSDKExtFinalizer", referenced from:

      _g_com_adobe_air_fre_fmap in extensionglue.o

     (maybe you meant: _qqSDKExtFinalizer_name)

  "_qqSDKExtInitializer", referenced from:

      _g_com_adobe_air_fre_fmap in extensionglue.o

     (maybe you meant: _qqSDKExtInitializer_name)

  "_OBJC_CLASS_$_CTTelephonyNetworkInfo", referenced from:

      objc-class-ref in TencentOpenAPI(MTA4QCHelper.o)

ld: symbol(s) not found for architecture armv7

Compilation

  

 3、通過配置platform.xml解決上面這個錯誤(在linkerOptions屬性中添加引用的第三方類庫)。

windows下重新打包產生ane,air項目運行打包報錯:

 

原因是打包時adt會去讀取該第三方類庫,讀取不到。需要在fb中本機擴充處配置Apple iOS sdk(因為iossdk沒有windows版,因此需要把fb項目放入mac上運行,進入第4點)

注意<linkerOptions> 標籤需要 AIR 3.3 或更高版本

 

4、在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配置如下:

 

 

5、因為不想把項目放在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。

 

6、為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);}}}}

 

 

7、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。

 

8、其他小插曲,一開始安裝了flash builder4.7,配置最新的air3.9,項目編譯報錯:提示: “在源路徑中找到的檔案必須擁有一個外部可見定義。如果檔案中的某個定義應當是外部可見的,請將該定義放入包。”

“AIR 應用程式識別碼“net.flash8.game.guess.debug”與在配置概要檔案中指定的模式“net.flash8.game.guess”不匹配。請更改應用程式識別碼,或使用與現有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看能不能直接拿來用,最終發現不支援,還得自己開發。

 

歸納步驟:

1、配置開發環境(mac、xcode,熟悉他們的用法)

2、建立xcode工程(建議使用xcode-template-ane-master),匯出.a庫檔案

3、建立As commonAneLib工程,編寫ane命令並打包

4、配置-app.xml許可權(很重要)

5、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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.