我在 IOS 上有一个框架项目,我想将它更改为一个 cocoapod 项目,但是正如我从制作 cocoapod 文档中读到的那样,它通常用于源代码开放的项目。 然而,我们的 SDK 是商业的,我们的客户为此付费,所以我想将我现有的框架包含到 cocoapod 库(私有(private)或公共(public))中,但我不想看到我的源代码。这样的事情可能吗?
我看到谷歌分析做了类似的事情 (https://developers.google.com/analytics/devguides/collection/ios/v3/)
有人知道我该怎么做吗?
[编辑]
根据答案,我修改了我们的 podspec 文件,如下 url 所示: https://github.com/Kandy-IO/test-cp/blob/1.6.7/CPaaSSDK.podspec
但是当我尝试将它推送到 cocoapods 时,它给出了以下错误
Validating podspec
-> CPaaSSDK (1.6.7)
- ERROR | [iOS] public_header_files: The pattern includes header files that are not listed in source_files (/private/var/folders/kl/zfs4qq_d119cvqq26x9rt3zc0000gp/T/CocoaPods-Lint-20190513-14320-1opt8kx-CPaaSSDK/Pods/CPaaSSDK/CPaaSSDK.framework/Headers/CPaaSSDK-Swift.h, /private/var/folders/kl/zfs4qq_d119cvqq26x9rt3zc0000gp/T/CocoaPods-Lint-20190513-14320-1opt8kx-CPaaSSDK/Pods/CPaaSSDK/CPaaSSDK.framework/Headers/CPaaSSDK.h).
- ERROR | [iOS] xcodebuild: Returned an unsuccessful exit code. You can use `--verbose` for more information.
- NOTE | [CPaaSSDK/CPUtilities, CPaaSSDK/RestManager, CPaaSSDK/CPWebRTC, and more...] xcodebuild: note: Using new build system
- NOTE | [CPaaSSDK/CPUtilities, CPaaSSDK/RestManager, CPaaSSDK/CPWebRTC, and more...] xcodebuild: note: Planning build
- NOTE | [CPaaSSDK/CPUtilities, CPaaSSDK/RestManager, CPaaSSDK/CPWebRTC, and more...] xcodebuild: note: Constructing build description
- NOTE | xcodebuild: ld: warning: Could not find auto-linked library 'swiftCoreGraphics'
- NOTE | xcodebuild: ld: warning: Could not find auto-linked library 'swiftFoundation'
- NOTE | xcodebuild: ld: warning:
- NOTE | xcodebuild: ld: warning: Could not find auto-linked library 'swiftMetal'
- NOTE | xcodebuild: ld: warning: Could not find auto-linked library 'swiftDarwin'
- NOTE | xcodebuild: ld: warning: Could not find auto-linked library 'swiftUIKit'
- NOTE | xcodebuild: ld: warning: Could not find auto-linked library 'swiftCoreFoundation'
- NOTE | xcodebuild: ld: warning: Could not find auto-linked library 'swiftObjectiveC'
- NOTE | xcodebuild: ld: warning: Could not find auto-linked library 'swiftDispatch'
- NOTE | xcodebuild: ld: warning: Could not find auto-linked library 'swiftCoreMedia'
- NOTE | xcodebuild: ld: warning: Could not find auto-linked library 'swiftQuartzCore'
- NOTE | xcodebuild: ld: warning: Could not find auto-linked library 'swiftCore'
- NOTE | xcodebuild: ld: warning: Could not find auto-linked library 'swiftCoreImage'
- NOTE | xcodebuild: ld: warning: Could not find auto-linked library 'swiftCoreAudio'
- NOTE | xcodebuild: ld: warning: Could not find auto-linked framework 'CPAddressBookService'
- NOTE | xcodebuild: ld: warning: Could not find auto-linked framework 'CPWebRTC'
- NOTE | xcodebuild: ld: warning: Could not find auto-linked framework 'CPAuthenticationService'
- NOTE | xcodebuild: ld: warning: Could not find auto-linked framework 'NotificationEngine'
- NOTE | xcodebuild: ld: warning: Could not find auto-linked framework 'CPMessagingService'
- NOTE | xcodebuild: ld: warning: Could not find auto-linked framework 'CPUtilities'
- NOTE | xcodebuild: RestManager.CPRestDownloadRequest.completion(_: __C.NSObject?, error: Swift.Error?) -> () in CPaaSSDK(CPRestDownloadRequest.o)
- NOTE | xcodebuild: function signature specialization <Arg[1] = Exploded> of CPAddressBookService.CPAddressBookService.(logResult in _FFF4592E3450CC7F075A904CF3818DC2)(error: __C.CPError?, functionName: Swift.String) -> () in CPaaSSDK(CPAddressBookService.o)
- NOTE | [iOS] xcodebuild: clang: error:
- NOTE | [iOS] xcodebuild: ld: warning: Could not find auto-linked library 'swiftsimd'
- NOTE | [iOS] xcodebuild: ld: warning: Could not find auto-linked library 'swiftAVFoundation'
- NOTE | [iOS] xcodebuild: ld: warning: Could not find auto-linked framework 'RestManager'
- NOTE | [iOS] xcodebuild: ld: warning: Could not find auto-linked framework 'CPPresenceService'
- NOTE | [iOS] xcodebuild: ld: warning: Could not find auto-linked framework 'CPCallService'
- NOTE | [iOS] xcodebuild: ld: warning: Could not find auto-linked framework 'CPPushService'
- ERROR | [CPaaSSDK/CPUtilities, CPaaSSDK/RestManager, CPaaSSDK/CPWebRTC, and more...] file patterns: The `vendored_frameworks` pattern did not match any file.
- WARN | [CPaaSSDK/CPUtilities, CPaaSSDK/RestManager, CPaaSSDK/CPWebRTC, and more...] file patterns: The `public_header_files` pattern did not match any file.
[!] The spec did not pass validation, due to 3 errors and 1 warning.
谢谢
最佳答案
CocoaPods 的 podspec 允许发布闭源 pod。
您可以使用以下 podspec 设置:
-
vendored_frameworks
指向 repo 协议(protocol)中的.framework
包; -
vendored_libraries
指向静态库文件 (.a
) plussource_files
指向头文件,以便客户端应用现在如何使用该库。
您甚至可以将两者结合起来,物有所值。
正确设置后,您准备好的库文件将被发送,而不是必须由开发人员构建的源文件。
为了区分平台,你可以这样写:
spec.ios.vendored_frameworks = "..."
spec.osx.vendored_frameworks = "..."
同样,vendored_libraries
也可用于平台参数。
静态库
正如@Sven Herzberg 提到的,Flurry SDK像这样使用静态库加 header :
s.subspec 'FlurrySDK' do |ss|
ss.source_files = [
'Flurry/Flurry.h',
'Flurry/FlurrySessionBuilder.h',
'Flurry/FlurryConsent.h',
'Flurry/FlurryEmpty.m'
]
ss.platform = :ios, '8.0'
ss.frameworks = 'Foundation', 'SystemConfiguration', 'UIKit', 'Security'
ss.vendored_libraries = "Flurry/libFlurry_9.2.1.a"
end
框架包
另一方面,Google Ads SDK v7.35使用 frameworks 和一个没有标题的静态库(我不确定你会如何使用它):
"source": {
"http": "https://dl.google.com/dl/cpdc/bda58e433afe6cb0/Google-Mobile-Ads-SDK-7.35.0.tar.gz"
},
"vendored_frameworks": [
"Frameworks/frameworks/GoogleMobileAds.framework"
],
"vendored_libraries": [
"Libraries/libGoogleMobileAds.a"
],
注意:source
参数指向包含框架和静态库的可下载包,而不是像 source_files
那样指向 header 。我在第一次扫描规范时忽略了这一点。
关于ios - 在不包含源代码的情况下创建 CocoaPod 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35551149/