cocoapods 不支持直接集成 OpenSSL,将 OpenSSL 源码编译为 framework,并发布至 cocoapods,名称为 GMOpenSSL,方便通过 cocoapods 集成。
GMOpenSSL 版本 | OpenSSL 版本 | 支持架构 | Bitcode | 兼容版本 |
---|---|---|---|---|
3.0.8 | 1.1.1w | x86_64 arm64 | 不包含 | iOS>= iOS 9.0, OSX>=10.13 |
2.2.9 | 1.1.1q | x86_64 arm64 | 包含 | >= iOS 9.0 |
2.2.4 | 1.1.1l | x86_64 arm64 arm64e armv7 armv7s | 包含 | >= iOS 8.0 |
CocoaPods 是最简单方便的集成方法,编辑 Podfile 文件,添加
pod 'GMOpenSSL'
然后执行 pod install
即可,默认最新版本。
GMOpenSSL 支持 SwiftPM,在工程中使用,点击 File
-> Swift Packages
-> Add Package Dependency
,输入 https://github.com/muzipiao/GMOpenSSL.git,或者在 Xcode 中添加 GitHub 账号,搜索 GMOpenSSL
即可。
如果在组件库中使用,更新 Package.swift
文件:
dependencies: [
.package(url: "https://github.com/muzipiao/GMOpenSSL.git", from: "3.0.3")
],
如果编译的静态库不能满足需求,可以自行运行脚本编译。工程目录下有一个名称为 OpenSSL_BUILD 的文件夹,依次执行 cd 切换到当前目录下,然后执行make
即可,待执行完毕,即可看到编译完成的 OpenSSL_BUILD/Frameworks/OpenSSL.xcframwork
。静态库在对应平台的 lib 文件夹下,如iphoneos/lib/libcrypto.a
。
编译工程依赖开源项目OpenSSL,由于此项目未暴露国密头文件,本目录与原项目有小量改动;主要改动为将 OpenSSL 源码 include/crypto/ 路径下的 sm2.h、sm3.h,sm4.h 都拷贝至项目。
主要步骤:
- 将
OpenSSL_BUILD/gmheaders
文件夹下头文件夹拖至项目,并设置头文件依赖为public; - 在
OpenSSL_BUILD/support
目录下的OpenSSL.h
中添加下方导入,然后执行make
编译即可;
#include <OpenSSL/sm2.h>
#include <OpenSSL/sm3.h>
#include <OpenSSL/sm4.h>
ITMS-91065: Missing signature - Your app includes “Frameworks/OpenSSL.framework/OpenSSL”, which includes BoringSSL / openssl_grpc, an SDK that was identified in the documentation as a privacy-impacting third-party SDK. If a new app includes a privacy-impacting SDK, or an app update adds a new privacy-impacting SDK, the SDK must include a signature file. Please contact the provider of the SDK that includes this file to get an updated SDK version with a signature.
解决办法,对指定二进制文件手动签名即可,可参考issues 92。
# 查看签名,无签名显示 code object is not signed at all
codesign -dv --verbose=4 OpenSSL.xcframework
# 钥匙串复制证书名称,执行此命令即可签名。
xcrun codesign --timestamp -s "证书全称" OpenSSL.xcframework
# 验证签名
xcrun codesign --verify --verbose OpenSSL.xcframework