守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 1731|回复: 0

[IOS] 开发QQ互联ios版Ane扩展 辛酸史

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51788
    钢镚
    1422

    开源英雄守望者

    发表于 2015-1-15 11:55:24 | 显示全部楼层 |阅读模式
    本帖最后由 破晓 于 2015-1-15 12:02 编辑

    开发QQ互联ios版Ane扩展辛酸史:

    1、安装mac系统非常痛苦,找了好几个版本都装不上,同时对mac的基本操作和xcode的基本操作不熟悉。

    2、用xcode建立ane项目(使用xcode-template-ane-master模板,下载地址https://github.com/divijkumar/xcode-template-ane),引入第三方object-cframework,生成.a文件,供windows下生成ane文件。
    发现windows下 调用第三方sdk后编译的ane,air调用打包时卡住(原因有两种,一是object-C项目代码有错误,但可正常生成.a库文件;二是引用了第三方framework,但未配置platform.xml打包进ane中,读取不到第三方sdk)。
    解决办法:先排除引用第三方类库问题,再排查代码(只好对怀疑的地方注释掉在编译.a,生成ane再打包)
    排查完错误后,编译不卡住了,但仍旧打包时报错:
    1. 打包应用程序时出错:

    2. Undefined symbols for architecture armv7:

    3.   "_qqSDKExtFinalizer", referenced from:

    4.       _g_com_adobe_air_fre_fmap in extensionglue.o

    5.      (maybe you meant: _qqSDKExtFinalizer_name)

    6.   "_qqSDKExtInitializer", referenced from:

    7.       _g_com_adobe_air_fre_fmap in extensionglue.o

    8.      (maybe you meant: _qqSDKExtInitializer_name)

    9.   "_OBJC_CLASS_$_CTTelephonyNetworkInfo", referenced from:

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

    11. ld: symbol(s) not found for architecture armv7

    12. 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:
    1. /Applications/Xcode2.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/
    复制代码
    并且把第三方类库TencentOpenAPI.framework 放入上面路径中System/Library/Frameworks/下,在xcode中导入相关需要的ios类库再运行提示
    1. ld: librarynot found for -libiconv

    2. 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-ARMplatformoptions.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。
    也就是说,如果项目再mac上发布ipa,那么第三方framework可以以sdk方式配置、不打包进入ane,而如果ane在mac上制作供window上打包,则需要把framework打包进ane中。

    6、为QQ互联sdk写ane,发送消息无法回调,因为 object-c部分要重写handleOpenURL方法,而air app自动创建的窗口无法重写这个方法。

    解决办法:a s上侦听 InvokeEvent.INVOKE事件,收到事件后再通过ane调用 object-c方法,里面再调用sdk的handleOpenURL方法。
    1. NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, onInvoke);  
    2.     private function onInvoke( event : InvokeEvent ) : void  
    3.     {  
    4.         if (Capabilities.manufacturer.indexOf("iOS") != -1)//只在ios下采用这种方式  
    5.         {  
    6.             if (event.arguments != null && event.arguments.length > 0)  
    7.             {  
    8.                 var url:String = event.arguments[0] as String;  
    9.                 if ( url != null && url.indexOf("tencent") == 0)  
    10.                 {  
    11.                     contex.call("handleOpenURL", url);  
    12.                 }  
    13.             }  
    14.         }  
    15.     }  
    复制代码
    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 应用程序 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出现错误:
    1. Undefined symbolsfor architecture armv7:

    2. “_OBJC_CLASS_$_XXX”,referenced from:

    3. objc-class-ref inXXX

    4. ld: symbol(s) notfound for architecture i386

    5. 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项目工程调用

      参考的相关网站:


    应用程序启动和退出选项


    构建针对 iOS 和 Android 的原生扩展 – 第三部分: 构建 iOS 库


    iOS5support for AIR/Using external SDKs to package apps:


    使用ANE整合Facebook


    Adobe AIR打包用到外部sdk的ANE时报错


    IOS ANE的坑爹之路(一)


    ANE-Facebook:


    ANEList-master:



    【原文链接:http://blog.csdn.net/linguifa/article/details/12754489/  转载请注明出处】

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2019-11-18 22:39 , Processed in 0.047942 second(s), 36 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表