封装qq分享静态库到cocopod
封装qq分享静态库到cocopod
1,创建framework库,到腾讯开放平台(open.qq.com)申请项目appid
2,将iOS SDK中的TencentOpenAPI.framework和TencentOpenApi_IOS_Bundle.bundle文件拷贝到应用开发的目录下并引用。
3,添加SDK依赖的系统库文件。分别是”Security.framework”, “libiconv.dylib”,“SystemConfiguration.framework”,“CoreGraphics.Framework”、“libsqlite3.dylib”、“CoreTelephony.framework”、“libstdc++.dylib”、“libz.dylib”。
4,创建一个继承与NSObject的类,例如:CHShareUtil,测试方法:- (void)share;
在Build Phases中把.h文件放进public里。在静态库头文件里引入#import “CHQQShare.h"
#import <TencentOpenAPI/QQApiInterface.h>
#import <TencentOpenAPI/QQApiInterfaceObject.h>
#import <TencentOpenAPI/TencentOAuth.h>
- (void)share
{
TencentOAuth*oauth = [[TencentOAuth alloc] initWithAppId:@“你的id,必须填写才能分享" andDelegate:self];
QQApiTextObject *txtObj = [QQApiTextObject objectWithText:@"text"];
SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:txtObj];
QQApiSendResultCode sent = [QQApiInterface sendReq:req];
}
5,创建一个项目,引用自己封装的framework,注意:在Build Rules里创建(如果没有)Copy Files,Destination选Frameworks,把自定义的framework拖过来。否则会出现崩溃:Reason: image not found。
6,在项目plist里面配置白名单
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<string>weixin</string>
<string>mqq</string>
<string>tim</string>
<string>wechat</string>
<string>mqqopensdkapiv2</string>
<string>mqqapi</string>
</array>
</plist>
7, 项目里调用: [[[CHQQShare alloc]init] share]; 即可实现qq分享
8,最后根据我的pod博客即可发布到pod。http://www.cnblogs.com/huntaiji/p/6908982.html
遇到找不到头文件QQApiInterface.h的问题,pod配置文件的问题,参考我的这俩主要配置:
s.source_files = "CHShareUtil", "CHShareUtil/**/*.{h,m}"
s.public_header_files = "CHShareUtil/CHQQShare.h"
全配置文件:
Pod::Spec.new do |s|
s.name = "CHShareUtil"
s.version = "0.0.3"
s.summary = "封装QQ分享到cocoaPod,无需复杂配置即可方便的调用,基于:qq V3.2.1"
s.description = <<-DESC
封装QQ分享到cocoaPod,无需复杂配置即可方便的调用,基于:qq V3.2.1 后期会集成微信等分享功能
DESC
s.homepage = "https://github.com/lichanghong/CHShareUtil"
s.license = "MIT"
# s.license = { :type => "MIT", :file => "FILE_LICENSE" }
s.author = { "李长鸿" => "lichanghong@b.360.cn" }
s.platform = :ios, "8.0"
s.source = { :git => "https://github.com/lichanghong/CHShareUtil", :tag => "#{s.version}" }
s.source_files = "CHShareUtil", "CHShareUtil/**/*.{h,m}"
s.public_header_files = "CHShareUtil/CHQQShare.h"
s.resource = "CHShareUtil/TencentOpenApi_IOS_Bundle.bundle"
s.requires_arc = true
s.pod_target_xcconfig = { 'ENABLE_BITCODE' => 'NO' }
s.frameworks = 'Security','SystemConfiguration','CoreGraphics','CoreTelephony', 'UIKit', 'Foundation'
s.libraries = 'iconv','sqlite3','stdc++','z'
s.ios.vendored_frameworks = 'CHShareUtil/TencentOpenAPI.framework'
end
封装qq分享静态库到cocopod的更多相关文章
- iOS开发之静态库(三)—— 图片、界面xib等资源文件封装到.a静态库
编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一.首先将资源文件打包成bundle 新建工程:File -> Ne ...
- iOS开发之静态库(五)—— 图片、界面xib等资源文件封装到静态框架framework
编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一.首先将资源文件打包成bundle 由于bundle是静态的,所以可以将 ...
- 自己在linux上编译、链接、动态库和静态库的学习笔记
在平常的项目中,我们都是使用公司要求的makefile.makedebug一类的文件,因此,在编译.链接.生成和链接动态库与静态库的时候,我们只是简单的使用一些已经设置的变量,只是简单的修改.添加一些 ...
- 封装ios静态库碰到的一些问题(三)
静态库封装好以后,就存在一个问题,静态库,模拟器的静态库何真机的静态库是分开的,那么能够合并,答案是肯定的,但是必须我们手工在终端工具下执行命令合并 lipo -create Release-ipho ...
- 封装ios静态库碰到的一些问题(一)
封装IOS动态库,碰到的第一个问题,就是资源文件的问题,如果将你的程序封装成为静态库,那么静态库中不会包含资源文件和xib文件,这个时候就需要自己封装bundle文件了,而笔者开发环境默认是xcode ...
- 经验分享:Xcode 创建.a和framework静态库【转】
作者:Haley_Wong 最近因为项目中的聊天SDK,需要封装成静态库,所以实践了一下创建静态库的步骤,做下记录. 库介绍 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态 ...
- VS2012(update3)编译Qt5.1.1 32位静态库debug-and-release版及结果分享
1. 下载zip源码,我下载的是qt-everywhere-opensource-src-5.1.1.zip这个文件. 2.安装python 3.解压缩qt-everywhere-opensource ...
- 经验分享:Xcode 创建.a和framework静态库
最近因为项目中的聊天SDK,需要封装成静态库,所以实践了一下创建静态库的步骤,做下记录. 库介绍 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. iOS中的 ...
- iOS xcode创建静态库封装自己的SDK及使用
https://www.cnblogs.com/JustForHappy/p/5773039.html 一,静态库和动态库的区别在这里就不说了,个人感觉如果是自己封装提供别人下载的话应该是静态库比较方 ...
随机推荐
- 有趣的if循环
今天,在论坛看到一个有趣的if 循环,我感觉有不错,就分享出来 问题,列表只有6个数,为什么打印8个数?原理? q = ['a', 'b', 'c', 'd', 'e', 'f'] for i in ...
- 本地计算机上的 postgresql 服务启动后停止解决方法
在启动 postgresql 服务是遇到这种情况: 解决方法: 打开计算机管理====>查看应用程序日志信息,可以看出,由于日志配置错误的问题. 找到 postgresql.conf 文件,做如 ...
- xibai的PCI卡在英文系统上安装报错
通过购买时自带的光驱,在里面直接找相对应的型号的驱动,直接安装,即可 不要通过电脑管理,然后更新驱动的这种方式,会报错
- 【转】链接伪类(:hover)CSS背景图片有闪动BUG
来源:http://www.css88.com/archives/744 --------------------------------------------------------------- ...
- js将手机号中间四位变成*号
方法一.利用数组splice,split,join方法 var tel = 18810399133; tel = "" + tel; var ary = tel.split(&qu ...
- Delphi indy线程控件TIdThreadComponent的使用
当程序需要做耗时操作,例如访问数据库获取较多的数据.获取大文件MD5.网络访问数据量比较大.界面需要频繁刷新等等,都可以用线程来解决界面卡顿的问题,从而优化用户体验. 在知道TIdThreadComp ...
- javascript事件流机制
(1)冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发. IE 5.5: div -> body -> document IE 6.0: div ...
- Python_Mix*生成器,生成器函数,推导式,生成器表达式
生成器: 生成器的本质就是迭代器 生成器一般由生成器函数或者生成器表达式来创建,其实就是手写的迭代器 def func(): print('abc') yield 222 #由于函数中有了yield ...
- emacs技巧
Table of Contents "ctrl space"设置mark 同时在选中的各行行首添加相同内容 寄存器 跳转到某行 删除光标所在的空格和TAB或空白行 把TAB全部转换 ...
- 大数据面试题——如何找出访问最多的IP
问题描述: 现有海量日志数据保存在一个超大的文件中,该文件无法直接存入内存,要求从 中提取某天访问BD次数最多的IP 分析解读: 由于这个题目只关心某一天访问次数最多的IP,因此可以首先对文件进行一次 ...