开发QQ互联ios版Ane扩张 辛酸史
来源: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再打包)
排查完错误后,编译不卡住了,但仍旧打包时报错:
|
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 应用程序 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看能不能直接拿来用,最终发现不支持,还得自己开发。
归纳步骤:
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
开发QQ互联ios版Ane扩张 辛酸史的更多相关文章
- 开发腾讯移动游戏平台SDK ios版Ane扩展 总结
本文记录了在开发 腾讯移动游戏平台SDK(MSDK) ios版Ane扩展 过程中所遇到的问题 文中非常多问题都是基础的问题.对object c和xcode配置了解不深入导致的.(没办法,开发ane的程 ...
- 自己开发iOS版按键精灵--TTouch
利用闲余时间,把之前的按键录制和播放整理了一些,开发了一个iOS版按键录制.播放的越狱APP,类似按键精灵.触动精灵等按键类的基本功能.脚本采用lua语法格式,可直接执行lua脚本,通过lua和obj ...
- 中小团队快速实现持续交付iOS版
时间来到8102年,但是很多中小团队还是缺少持续交付,打包发布还是处于原始手打阶段使得工程师们不能安安心心写点代码,明明今天还有很多bug需要修改,突然测试工程师跑过来说赶紧给我出一个包,这时候你不得 ...
- 开发腾讯移动游戏平台SDK Android版Ane扩展 总结
本文记录了在开发 腾讯移动游戏平台SDK(MSDK) Android版Ane扩展 过程中所遇到的问题和相关解决方式 问题一:编译报错:Unable to resolve target 'android ...
- Xamarin For Visual Studio 3.0.54.0 完整离线破解版(C# 开发Android、IOS工具 吾乐吧软件站分享)
Xamarin For Visual Studio就是原本的Xamarin For Android 以及 Xamarin For iOS,最新版的已经把两个独立的插件合并为一个exe安装包了.为了区分 ...
- Xamarin Mono For Android 4.6.07004 完整离线安装破解版(C#开发Android、IOS工具)
Xamarin是由Miguel de Icaza成立的一家新的独立公司,目的是给Mono一个继续奋斗的机会.Mono for Android (原名:MonoDroid)可以让开发人员使用 Mic ...
- iOS开发 QQ粘性动画效果
QQ(iOS)客户端的粘性动画效果 时间 2016-02-17 16:50:00 博客园精华区 原文 http://www.cnblogs.com/ziyi--caolu/p/5195615.ht ...
- 手把手教你修改iOS版QQ的运动步数
手把手教你修改iOS版QQ的运动步数 现在很多软件都加上了运动模块,比如QQ和微信,而且还有排行榜,可以和好友比较谁的运动步数多,任何东西只要添加了比较功能,就变得不一样了.今天教大家用代码去修改QQ ...
- QQ互联开发-01-开发者注册和网站应用申请
首先需要申请网站应用 要想使用QQ互联,首先需要先注册一个开发者账号,使用QQ号码可以注册,注册后,就可以创建网站应用了: 通过下面地址:https://connect.qq.com/,我们去登录QQ ...
随机推荐
- 解决Bootstrap标签页(Tab)插件切换echarts不显示问题
1.参考连接:https://blog.csdn.net/qq_24313955/article/details/78363981 问题描述:在echarts跟bootstrap选项卡整合的时候,默认 ...
- 日期正则表达式yyyyMMdd
日期校验yyyyMMdd, 包括闰月等校验. package com.xgcd; import java.util.regex.Matcher; import java.util.regex.Patt ...
- 012-Shell 提示确认(Y / N,YES / NO)
例1:确认提示(一次) 这个示例代码将为确认提示一次,如果你给输入错误,程序会以状态1退出.这个例子将只接受Y或N或YES或NO(不区分大小写). #!/bin/bash read -r -p &qu ...
- python之psutil模块
简述 psutil是一个跨平台库(http://code.google.com/p/psutil/) ,能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息.它主要应用于系 ...
- [LeetCode] 119. Pascal's Triangle II 杨辉三角 II
Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3, ...
- [LeetCode] 298. Binary Tree Longest Consecutive Sequence 二叉树最长连续序列
Given a binary tree, find the length of the longest consecutive sequence path. The path refers to an ...
- 对get post等http请求方式的理解
本文是关于get,post等几种请求方式的资料搜集和学习,HTTP,HTTP2协议的涉及点,然后提到了socket协议,RPC 先是和朋友的一些交流对话,问着问着就到了我的知识盲区.需要恶补一下这方面 ...
- SpringBoot系列教程JPA之新增记录使用姿势
SpringBoot系列教程JPA之新增记录使用姿势 上一篇文章介绍了如何快速的搭建一个JPA的项目环境,并给出了一个简单的演示demo,接下来我们开始业务教程,也就是我们常说的CURD,接下来进入第 ...
- TCP/IP学习笔记2--协议分层与OSI参考模型
协议的分层: 为解决不同计算机之间的通信,ISO(International Organization for Standards)指定了一个国际标准OSI(Open Systems Intercon ...
- dubbo学习之路-SPI机制
dubbo学习之路-SPI机制 1.SPI 1.1Java SPI 原理 SPI是service provider interface简称.在java JDK中 内置的一种服务提供发现机制.它解决在一 ...