自定义 cocoapod 找不到 swift 文件
Posted
技术标签:
【中文标题】自定义 cocoapod 找不到 swift 文件【英文标题】:Custom cocoapod not finding swift file 【发布时间】:2019-05-03 20:56:45 【问题描述】:我正在尝试创建一个自定义 Cocoapod 来处理我的 ios 应用程序的所有网络调用。我遇到的问题是,当我尝试在代码中引用它们时,找不到应该属于我的新 Cocoapod/框架的一些文件。
我按照本教程https://www.raywenderlich.com/5823-how-to-create-a-cocoapod-in-swift 成功创建了 Cocoapod .xcworkspace 项目(名称:ios-oauth2-rest-template)并将其添加到 bitbucket 并在 bitbucket 上创建了一个私有 PodSpec 存储库(名称:KPodSpec) (两个单独的仓库)。
我能够完成本教程,但我被困在“使用您的新 CocoaPod”部分。我能够运行以下命令将 Cocoapod 添加到我的 PodSpec 存储库中:
pod repo add KPodSpecs [Your RWPodSpecs Git URL]
pod repo push KPodSpecs ios-oauth2-rest-template.podspec
当我尝试在现有项目(名为:KApp)中使用我的新 pod 时,我的 Cocoapod 中的一些文件能够被引用,而其他文件即使在我 import ios_oauth2_rest_template
之后也不会自动完成。
我不确定我是否只是在我的KApp
项目中缺少ios-oauth2-rest-template
的框架。任何帮助将不胜感激。
KApp Podfile:
# Uncomment the next line to define a global platform for your project
platform :ios, '12.0'
source 'https://github.com/CocoaPods/Specs.git'
source 'https://bitbucket.org/kpodspecs.git'
target 'KApp' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
# Pods for KApp
target 'KAppTests' do
inherit! :search_paths
# Pods for testing
end
target 'KAppUITests' do
inherit! :search_paths
# Pods for testing
end
pod 'LBTAComponents'
pod 'SwiftyJSON', '~> 4.0'
pod 'TRON', '~>4.0'
pod 'ios-oauth2-rest-template', '~> 0.0.1'
end
ios-oauth2-rest-template podspec:
Pod::Spec.new do |s|
# 1
s.platform = :ios
s.ios.deployment_target = '12.0'
s.name = "ios-oauth2-rest-template"
s.summary = "My summary here"
s.requires_arc = true
# 2
s.version = "0.0.1"
# 3
s.license = :type => "Proprietary", :file => "LICENSE"
# 4 - Replace with your name and e-mail address
s.author = "My Name" => "myemail@email.com"
# 5 - Replace this URL with your own GitHub page's URL (from the address bar)
s.homepage = "https://bitbucket.org/myStuff"
# 6 - Replace this URL with your own Git URL from "Quick Setup"
s.source = :git => "https://bitbucket.org/myStuff.git",
:tag => "#s.version"
# 7
s.framework = "UIKit"
s.dependency 'Heimdallr', '~> 3.6.1'
# 8
s.source_files = "ios-oauth2-rest-template/**/*.swift"
# 9
#s.resources = "RWPickFlavor/**/*.png,jpeg,jpg,storyboard,xib,xcassets"
# 10
# s.swift_version = "4.0"
end
ios-oauth2-rest-template Podfile:
# Uncomment the next line to define a global platform for your project
platform :ios, '12.0'
target 'ios-oauth2-rest-template' do
# Uncomment the next line if you're using Swift or would like to use dynamic frameworks
use_frameworks!
# Pods for ios-oauth2-rest-template
pod 'Heimdallr', '~> 3.6.1'
target 'ios-oauth2-rest-templateTests' do
inherit! :search_paths
# Pods for testing
end
end
提前致谢。我已经在互联网上搜索了为什么会发生这种情况,但我很困惑,因为我一开始就没有太多使用 CocoaPods 的经验。
更新 这是一些截图
KApp 的 Pod 部分,用于展示我的一些课程。当我尝试使用ApplicationUtils
时,它工作得很好并且可以自动完成,但是当我尝试使用BaseClass
时,它似乎找不到它。
设置下的构建阶段显示所有 30 个文件都在编译源下。这 30 个文件与来自 ios-oauth2-rest-template
Xcode 项目的 30 个文件相匹配。第 31 个文件是ios-oauth2-rest-template-dummy.m
。
图片显示了ios-oauth2-rest-template
Cocoapod 项目的文件夹结构。
【问题讨论】:
所有 .swift 源文件都放入了ios-oauth2-rest-template
文件夹吗?安装 pod 后,在 Xcode 中打开您的项目,从底部选择 Pods
项目,在 Targets 下选择您的库名称,然后进入 Build Phases / Compile Sources。你能看到你的 pod 的所有 swift 源,还是缺少一些 swift 文件?
所有 .swift 源代码都在 ios-oauth2-rest-template 文件夹中。我在ios-oauth2-rest-template
Xcode 项目中有 30 个文件,当我打开 KApp
时,ios-oauth2-rest-template
文件夹中有 30 个文件。当我转到 Build Phases/Compile Sources 时,我看到了我的 pod 的所有 swift 源,是的。
参考上面上传的图片。
有趣...另一个提示:如果您使用 Xcode 的新构建系统(Xcode > 文件 > 工作区设置),您可能需要清理您的项目(Xcode > 产品 > 清理构建文件夹)和如果您正在开发自己的 pod,请再次构建它。或者只是尝试使用旧版构建系统。
最后一个提示:确保在有问题的 swift 文件中,类、结构、枚举等及其属性/函数是 public
或 open
以允许从吊舱外。
【参考方案1】:
感谢@balazs630,我能够解决问题。我必须确保我的访问控制设置为 public
或 open
才能访问它们。回顾我的代码,ApplicationUtils
是一个公共类,BaseClass
没有指定,所以默认是internal
,根据docs:
内部访问使实体可以在任何源文件中使用 来自他们的定义模块,但不在此之外的任何源文件中 模块。
对于遇到类似问题的任何人,请检查以确保您的访问控制设置正确。这里有一些资源可以让您熟悉 Swift 中的访问控制:
https://medium.com/@abhimuralidharan/swift-3-0-1-access-control-9e71d641a56c https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html【讨论】:
我遇到了这个问题,我已经在我的框架中使用了“Public Struct AppConstant”。但是,在 Pod 安装后,“AppConstant” - 使用未解析的标识符。你能指导我吗?以上是关于自定义 cocoapod 找不到 swift 文件的主要内容,如果未能解决你的问题,请参考以下文章
RestKit 编译失败,cocoapods use_frameworks for swift
CocoaPods 找不到 pod “5.0.0-beta.1” 的兼容版本