创建CocoaPod库而不包含源代码

时间:2016-02-22 10:24:01

标签: ios objective-c frameworks cocoapods

我是一个关于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.

由于

2 个答案:

答案 0 :(得分:0)

是的,这是可能的。只需查看Cocoapods for Flurry或Google Ads,他们就会将已编译的代码发送给用户。

答案 1 :(得分:0)

CocoaPods的podspec允许运送封闭源的豆荚。

您可以使用以下podspec设置:

您甚至可以结合两者的价值。

正确设置后,将提供准备好的库文件,而不是开发人员必须构建的源文件。

要区分平台,您可以编写:

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那样指向标头。第一次浏览规范时,我忽略了这一点。

相关问题