我是一个关于IOS的框架项目,我想把它改成一个cocoapod项目,不过我从制作cocoapod文档中读到的,它通常用于源代码打开的项目。 然而,我们的SDK是商业的,我们的客户正在为此付钱,所以我想将我现有的框架包含在cocoapod库(私人或公共)中,但我不希望看到我的源代码。有可能吗?
我'已经看到谷歌分析做了类似的事情(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.
由于
答案 0 :(得分:0)
是的,这是可能的。只需查看Cocoapods for Flurry或Google Ads,他们就会将已编译的代码发送给用户。
答案 1 :(得分:0)
CocoaPods的podspec允许运送封闭源的豆荚。
您可以使用以下podspec设置:
vendored_frameworks
指向仓库中的.framework
包; vendored_libraries
指向静态库文件(.a
) plus source_files
指向头文件,因此客户端应用程序现在如何使用该库。 您甚至可以结合两者的价值。
正确设置后,将提供准备好的库文件,而不是开发人员必须构建的源文件。
要区分平台,您可以编写:
spec.ios.vendored_frameworks = "..."
spec.osx.vendored_frameworks = "..."
类似地,vendored_libraries
也可用于平台参数。
正如@Sven Herzberg所述,Flurry SDK使用静态库和标头,如下所示:
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使用框架以及不带标题的静态库(我不确定您将如何使用它):
"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
那样指向标头。第一次浏览规范时,我忽略了这一点。