ios - 在不包含源代码的情况下创建 CocoaPod 库

标签 ios objective-c frameworks cocoapods

我在 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 设置:

您甚至可以将两者结合起来,物有所值。

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

为了区分平台,你可以这样写:

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/

相关文章:

ios - Swift 编译器错误 : use of undeclared type with framework

PHP Jquery ajax 类

ios - TabBar 图标对选择的弹跳效果,就像 Swift 中的 Twitter 应用程序

objective-c - 如何使 UIView 子类框架在外部不可变

objective-c - 我可以访问用于 Core Data 中外部二进制存储的文件吗?

objective-c - dealloc 会在 iPhone 上被调用吗?

swift - 如何创建一个包含 Objective-C 框架的 Swift Pod?

ios - 使用 Swift 和 Firebase 更改用户电子邮件和密码

iphone - UIActivityIndi​​cator 没有动画

ios - UIContextMenu Action Provider 在项目上放置不需要的复选标记图标