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

來源: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

打包應用程序時出錯:api

 Undefined symbols for architecture armv7:xcode

  "_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

  

 三、經過配置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

相關文章
相關標籤/搜索