所以这是我的程序。我在项目目录中创建了一个新的Podfile
,然后添加了以下内容
platform :ios, '9.0'
use_frameworks!
target 'CPod' do
pod 'AFNetworking', '~> 2.5'
pod 'ORStackView', '~> 2.0'
pod 'SwiftyJSON', '~> 2.1'
end
我解雇pod install
,一切顺利,打开xcworkspace
。然后我转到ViewController.swift
,如果我尝试导入一个广告连播,我会No such module 'SwiftyJSON'
,如果我要做import SwiftyJSON
。有什么想法吗?
编辑:SwiftyJSON是一个基于Swift的模块,而不是Obj-C
答案 0 :(得分:77)
尝试将Pods
框架添加到构建方案并构建框架。在您构建它之后,构建/运行您的项目。
步骤:
答案 1 :(得分:16)
按命令+选项+ Shift + K 然后运行您的应用,您将看到一个魔法。
或者从菜单 - >产品,按键盘上的Option键,您将看到Clean Build Folder。
看起来有趣的是Xcode怎么能和我们一起做这些事情但是当我使用Pod使用Swift库时发生了同样的事情,经过太多的努力后我最终得到了Clean Build Folder。
答案 2 :(得分:16)
安装podfile后,必须重新打开.xcworkspace文件(而不是.xcodeproj)。
快乐编码:)
答案 3 :(得分:15)
您也可以尝试使用以下方法重新安装pod:
pod deintegrate
然后
pod install
这为我解决了这个问题
答案 4 :(得分:8)
不确定这对其他人是否仍然有用。但是,在我的情况下,它最终是一个愚蠢的错误,没有引用.podspec文件中的依赖项。
我们有一个带有多个内部库的应用程序,这些库也相互依赖 - 我们在Podfiles中考虑了...但不在podspecs中。
所以,即使我们的Podfiles有:
应用程序/ Podfile
# Development Pods
pod 'ConsumingLibrary ', :path => '../ios-consuming-lib'
pod 'DependentLibrary1', :path => '../ios-library-one'
pod 'CommonCoreLibrary', :path => '../ios-common-core-lib'
ConsumingLibrary / Podfile
# Development Pods
pod 'DependentLibrary1', :path => '../ios-library-one'
pod 'CommonCoreLibrary', :path => '../ios-common-core-lib'
还需要在.podspec中调用它:
ConsumingLibrary / ConsumingLibrary.podspec
# TODO
# Add here any resources to be exported.
s.dependency 'DependentLibrary1', '~> 0.1.0-RC'
DependentLibrary1 / DependentLibrary1.podspec
# TODO
# Add here any resources to be exported.
s.dependency 'CommonCoreLibrary', '~> 0.1.0-RC'
我想我浪费了大约2个小时试图找出为什么我可以建立消费图书馆&运行测试,但是一旦我构建了应用程序,就消耗了所有三个库 - 我不断得到:
没有这样的模块' DependentLibrary1'
答案 5 :(得分:6)
在pod安装命令后尝试使用 pod update ,这将解决 No such module 的问题。 我只是尝试过,它工作正常。
谢谢, Ratneshwar
答案 6 :(得分:6)
就我而言,这是因为我打开了 xcodeproj
而不是正确的 xcworkspace
。
答案 7 :(得分:2)
我在开发的快速框架中遇到了同样的问题。该框架依赖于git项目,框架本身作为pod添加到我的主项目中。因此,理想情况下,podspec文件和Podfile中也指定了依赖关系。
通过我的主项目访问时没有遇到问题,但是当我单独打开框架时,它会抛出“没有这样的模块”错误。
根本原因是,基本配置设置的路径指向我的主项目而不是框架本身,因为我先在主项目中运行podinstall,然后在框架项目中运行。
例如:在项目文件中就像 0091AB0C861D71C94ADD7240 / * Pods-myframework.release.xcconfig * / = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name =“Pods-myframework.release.xcconfig”; path =“../../Apps/MyMainProject/Pods/Target支持文件/ Pods-myframework / Pods-myframework.release.xcconfig”; sourceTree =“”; };
完成下面提到的修复后, 4444F5B1B35F066E57F96782 / * Pods-myframework.release.xcconfig * / = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name =“Pods-myframework.release.xcconfig”; path = “Pods / Target Support Files / Pods-myframework / Pods-myframework.release.xcconfig”; sourceTree =“”; };
要修正错误,
答案 8 :(得分:2)
也有此问题。我注意到Pods/broken_framework_name
中用于框架的文件夹即使在pod安装或pod更新之后也产生了错误,仍然为空。因此,对我来说,这些步骤有所帮助:
XCode
DerivedData
Podfile.lock
。在进行此操作之前,请确保将您的Pod设置为特定版本,并且不会导致有害的代码更新pod deintegrate
.xcworkspace
文件use_frameworks!
,但也将其包含在我有错误的目标中pod install
所有步骤之后,我注意到丢失的框架文件终于出现了,并且构建再次正常工作。
答案 9 :(得分:2)
就像@jakub-truhlář所写的那样,根本的问题是缺少一些module.modulemap文件,这是由于混合Swift和Objective-C库的一些并发问题所致,但是最好手动尝试多次清理这些文件,而不是手动创建这些文件。派生数据并构建您的项目。成功构建项目后,请将module.modulemap文件提交到您的存储库中,以免丢失这些文件,例如更改当前分支。
答案 10 :(得分:1)
有时在 swift 项目中有 obj-c 窗格时(即使您使用.podfile
中的framework module MODULE_NAME_HERE {
umbrella header "MODULE_NAME_HERE.h"
export *
module * { export * }
link framework LINKED_FRAMEWORKS_AND_LIBRARIES_THE_POD_NEEDS_HERE
link framework "AdSupport"
link "c++"
link "z"
}
)
如果你确定安装了 pod 并且仍然没有没有这样的模块,请试试这个:
应该有一个包含 .framework 后缀的包文件。在其中创建一个文件夹 Modules 。在此文件夹中,使用代码
创建名为 module.modulemap 的文件{{1}}
重建,你应该没事。
答案 11 :(得分:0)
如果有多个目标。 例如。 Target1,Target2
use_frameworks!
target 'Target1' do
pod 'Fabric'
pod 'Crashlytics'
target 'Target2' do
end
end
然后运行pod安装。
答案 12 :(得分:0)
此问题的另一种体现方式:如果您有多个具有不同平台(例如iOS和watchOS)的目标,则需要确保您的podfile为每个目标指定了正确的平台。否则,Cocoapods可能会为错误的平台构建正确的吊舱,从而导致“无此类模块”错误。
您只需指定正确的平台即可解决此问题,例如
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.universidad.springboot.backend.academia</groupId>
<artifactId>academia</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>academia</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.RC2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security.oauth/spring-security-oauth2
<dependency> <groupId>org.springframework.security.oauth</groupId> <artifactId>spring-security-oauth2</artifactId>
<version>2.3.4.RELEASE</version> </dependency> <https://mvnrepository.com/artifact/org.springframework.security/spring-security-jwt
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-jwt</artifactId>
<version>1.0.9.RELEASE</version> </dependency> -->
<!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-runtime -->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-test -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<version>5.1.2.RELEASE</version><!--$NO-MVN-MAN-VER$ -->
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
<version>1.4.194</version><!--$NO-MVN-MAN-VER$ -->
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security.oauth/spring-security-oauth2
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
<version>2.4.0.RELEASE</version>
</dependency>
-->
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-jwt -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-jwt</artifactId>
<version>1.1.0.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-runtime -->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.walterjwhite.java.dependencies/hikari-jdbc-connection-pool -->
<dependency>
<groupId>com.walterjwhite.java.dependencies</groupId>
<artifactId>hikari-jdbc-connection-pool</artifactId>
<version>0.0.17</version>
<type>pom</type>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
答案 13 :(得分:0)
在安装pod时收到一些警告:“ ...目标将覆盖在...中定义的FRAMEWORK_SEARCH_PATHS
构建设置。”
修复并享受。
参考:target overrides the FRAMEWORK_SEARCH_PATHS build settings。
答案 14 :(得分:0)
使用多个目标的人,请不要忘记在pod中添加此行
def shared_pods
pod 'SSKeychain', '~> 0.1.4'
pod 'INAppStoreWindow', :head
pod 'AFNetworking', '1.1.0'
pod 'Reachability', '~> 3.1.0'
pod 'KSADNTwitterFormatter', '~> 0.1.0'
pod 'MASShortcut', '~> 1.1'
pod 'MagicalRecord', '2.1'
pod 'MASPreferences', '~> 1.0'
end
target 'Target_Name' do
shared_pods
end
target 'Target_Name_Two' do
shared_pods
end
答案 15 :(得分:0)
我通常会删除Pods
文件夹和.xcworkspace
文件,然后再次运行pod install
,这在几乎100%的情况下都会有所帮助。
答案 16 :(得分:0)
我的设置
没有一个答案对我有用,尽管有些答案提供了部分线索。就我而言,根本原因是我在运行pod install
后自定义了构建产品路径。
如果在创建Xcode项目后立即运行cocoapods,则通常可以通过打开生成的Xcode .xcworkspace
而不是.xcodeproj
来工作。
如果您在生成工作区后开始调整构建产品路径 ,就会发生有趣的事情。因为生成的Pods项目及其目标都引用旧的Xcode项目设置。
就我而言,我的麻烦来自:
$(SRCROOT)/build/$(CONFIGURATION)/$(EFFECTIVE_PLATORM_NAME)
下。因此,我继续将Pre-configuration Build Products Path
更改为它。...在完成pod install
之后。现在,生成的Pods
项目(包括其所有Framework目标)仍然指向旧位置,因此标头导入和您自己项目的链接都将失败(您会看到Command PhaseScriptExecution failed with a nonzero exit code
No such module
是固定的)。
修复:
Pods
重新生成pod install
项目和工作区。但是,在我的案例中,cocoapods将构建产品路径硬编码为${SRCROOT}/../build
,将Pre-configuration Build Products
编码为$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
,通常指向临时的~/Library/Developer
子文件夹。仍然不太正确。然后.... Framework Search Path
和Header Search Path
涵盖上述路径。Pods
项目设置和所有依赖项框架的Pre-configuration Build Products Path
以使用我的首选路径。道德课:每当您触摸Xcode项目设置中的路径时,始终重新生成Pod并验证关键结果路径。
更新
使用Xcode 11,Apple终于删除了令人困惑的“预配置构建产品路径”。要自定义构建产品路径,请在Xcode偏好设置中使用Locations
并预先烘焙全局相对路径。
答案 17 :(得分:0)
答案 18 :(得分:0)
请确保导入在pod的.podspec
中定义的正确框架名称。
答案 19 :(得分:0)
我尝试了所有这些建议,但对我没有任何帮助。相反,对我有用的是分解豆荚。然后从xcode层次结构中删除pods文件夹并进行pod安装。突然它起作用了。不要问我为什么,因为无论如何这些建议中的大多数都会受到打击或错过,但是如果它对其他人也有用,我会很高兴的。)
答案 20 :(得分:0)
在将CocoaPods添加到旧项目中时出现了此问题,该项目以前已经手动包含库。发生这种情况是因为Xcode无法解析由CocoaPods生成的Framework Search Path
,因为先前在目标设置中设置了值。
对我有帮助的解决方案:
复制旧路径
点击删除以完全清除目标列中的Framework Search Path
设置-CocoaPods生成的路径将出现在该位置
将旧的搜索路径重新添加到生成的路径下(仅当您仍有一些手动添加的框架可以使用时才需要)
清理项目,擦除派生数据,构建。
答案 21 :(得分:0)
我刚刚更新了终端中的特定依赖项
转到项目文件夹,然后在命令下运行
吊舱更新您的吊舱名称
对我来说,我需要做
pod更新ReachabilitySwift
答案 22 :(得分:0)
当我打开XCode,然后通过file-&gt; open recent选择我项目的工作区时,我遇到了这个问题。
我发现我的文件系统上有两个.xcworkspace文件用于相同的工作区/项目。
双击正确的.xcworkspace文件打开XCode就可以了。 正确的是有效的。
我后来删了错了。
答案 23 :(得分:0)
在框架module.modulemap文件中添加链接“c ++”为我工作
答案 24 :(得分:-1)
platform :ios, ‘9.0’
我在不同的情况下遇到了同样的错误:
就我而言,我的 Podfile 通过唱 platform :ios, ‘9.0’
专门将平台限制为 iOS,但我正在为 macOS 构建应用程序。
您可以尝试在 Xcode 中更改目标设备(方案下拉菜单)。
如果您的项目支持 macOS,您应该删除该行,或者停止为 macOS 构建/支持 macOS。
答案 25 :(得分:-5)
为了在Objective-C中使用Swift,你应该导入Xcode在编译时自动生成的头文件(NameOfModule + Swift.h)。在这种情况下,您应该尝试在头文件中导入SwifityJSON,如下所示:
#import "SwiftyJSON-Swift.h"