/GMOpenSSL

openssl 1.1.1w 的 framework 版本,发布至 cocoapods,方便集成。

Primary LanguageCMIT LicenseMIT

GMOpenSSL

Pod Version Platform Carthage compatible SwiftPM compatible Mac Catalyst compatible License

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

CocoaPods 是最简单方便的集成方法,编辑 Podfile 文件,添加

pod 'GMOpenSSL'

然后执行 pod install 即可,默认最新版本。

Swift Package Manager

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

如果编译的静态库不能满足需求,可以自行运行脚本编译。工程目录下有一个名称为 OpenSSL_BUILD 的文件夹,依次执行 cd 切换到当前目录下,然后执行make即可,待执行完毕,即可看到编译完成的 OpenSSL_BUILD/Frameworks/OpenSSL.xcframwork。静态库在对应平台的 lib 文件夹下,如iphoneos/lib/libcrypto.a

编译工程依赖开源项目OpenSSL,由于此项目未暴露国密头文件,本目录与原项目有小量改动;主要改动为将 OpenSSL 源码 include/crypto/ 路径下的 sm2.h、sm3.h,sm4.h 都拷贝至项目。

主要步骤:

  1. OpenSSL_BUILD/gmheaders文件夹下头文件夹拖至项目,并设置头文件依赖为public
  2. 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