iOS 开发对支付宝SDK进行二次打包,2018-03-22

一、新建一个静态库framework

1.新建一个静态库工程.

file→ new→ project, 弹出框中选择iOS→ framework & library中的cocoa touch static library.点击Next,输入product name: TestFramework, 点击Next→ 点击Create.

2.删除向导所生成工程中的Target.

点击工程名→ 点击TARGETS → 右键Delete.

3.增加一个新的Target.

点击Target底部的"+"号,弹出框中选择OS X→ Framework & Library中的Bundle.点击Next,输入product name TestFramework, 点击Finish.

4.修改新建 Target 的 Building Settings 项.

a: 选中TARGET→ Build Settings项, 将Architectures→ Base SDK 改为Latest iOS(iOS 11.2), 将Architectures 改为 $(ARCHS_STANDARD);

b: 在 Deployment项, 选中"Mac OS X Deployment Target", 点击键盘上的Delete键, 将“Targeted Device Family”改成"1,2";

c: 在 (null) - Deployment项, 修改"iOS Deployment Target"为"8.0",同时修改PROJECT的info下的Deployment Target → "iOS Deployment Target"为"8.0";

d: 在Linking项, 将"Dead Code Stripping" 改为"NO", "Link With Standard Libraries" 改为 "NO", 将 "Mach-O Type" 改为"Relocatable Object File";

f: 在Packing项, 将"Wrapper Extension" 改为 "framework";

5.修改 Target 的 Info 项.

点击Info, 将 "Bundle OS Type code" 改为 "FMWK"

6.将要写入静态库的源码文件拖入工程目录, 这里以一个简单的语句输出作为例子

Command+N 新建一个cocoa Touch class, 名字为TestLog, 点击Next, 点击create;

TestLog.h代码如下:

[objc]view plaincopy

#import

@interfaceTestLog : NSObject

- (void)TestLog;

@end

TestLog.m代码如下:

[objc]view plaincopy

#import"TestLog.h"

@implementationTestLog

- (void)TestLog

{

NSLog(@"这里是静态库输出日志\\n");

}

@end

7.删除TestFramework.m, 修改TestFramework.h内容如下:

[objc]view plaincopy

#ifndef TestFramework_h

#define TestFramework_h

#import

#endif

8.暴露Headers供外部项目调用接口.

选中Target下的Build Phases, 点击左上角"+"号→ "New Headers Phase", 展开Headers, 点击左下角"+", 选择"TestFramework.h"和"TestLog.h"→ 点击add, 将这两个头文件拖动到上方Public下.

9.然后分别在iOS Device 和 iOS Simulator 下编译.(command+B)

在Window→ Projects中左边选择TestFramework工程, 点击右边的Derived Data右边的箭头,打开Finder, 在../Build/Products目录下有真机和模拟器生成的TestFramework.framework

此路径可以直接选中framework后然后右击在finder中显示;

10.合并Framework.

打开终端, 输入:

cd /Users/djs/Library/Developer/Xcode/DerivedData/TestFramework-aainjryhnvupalarkmoushxwuwdr/Build/Products, 回车;

可以输入lipo -info XXX 来查看库的信息, armv7 arm64的是真机, X86_64的是模拟器;

输入命令:

lipo -create /Users/djs/Library/Developer/Xcode/DerivedData/TestFramework-aainjryhnvupalarkmoushxwuwdr/Build/Products/Debug-iphoneos/TestFramework.framework/TestFramework /Users/djs/Library/Developer/Xcode/DerivedData/TestFramework-aainjryhnvupalarkmoushxwuwdr/Build/Products/Debug-iphonesimulator/TestFramework.framework/TestFramework -output NewTestFramework

在Products目录下会生成一个NewTestFramework的文件, 将该文件拷贝覆盖TestFramework.framework目录下的TestFramework文件, 新的TestFramework.framework就是真机和模拟器通用的framework.

二、对支付宝SDK进行打包

1、以上的步骤只是简单的完成了最基本的打包,那么我们要做的是对支付宝的SDK进行打包;首先讲下我们对支付宝SDK进行打包的原因,是因为苹果审核人员在审核的时候首先会经过机审,机审过后才是人工审核,机审期间检测到支付宝的SDK就直接会来一个3.1.1大礼包,最少也是2.1大礼包;而且有很大几率延迟审核,小鹿哥真是吃够了苦头;然后PM还必须要求加上支付宝支付,于是小鹿哥,就想着把这个SDK打包成framework躲避机审(这并不违反规则)。

2、把支付宝SDK导入建好的工程下,然后把支付功能全部迁移到这个管理文件中,我们创建的是MyStaticLibrary.h和MyStaticLibrary.m,然后我们调用这个管理类中的接口就可以了。


把支付的所有类文件全部放在.m文件中,不允许访问;


那么现在再次在release模式下进行第一步操作,打包出来的framework就可以支持支付功能,并且能够上架了;


希望因为支付问题而烦恼的小伙伴,看到此文会有所帮助。


在Debug和Release模式下的静态库

你可能感兴趣的:(iOS 开发对支付宝SDK进行二次打包,2018-03-22)