在我创建了一个新的swift包之后,我调用swift package generate-xcodeproj。如果我的依赖项有了新版本,我调用swift package update。我的依赖项的新版本被下载和构建,但是Xcode现在对依赖项的旧版本有一个错误的引用。我可以再次调用swift package generate-xcodeproj,但是这将删除我设置的任何自定义目标。如何在不删除自定义目标的情况下更新swift依赖项和Xcode项目?
swift package generate-xcodeproj
swift package update
lstz6jyr1#
我只是偶然发现了这个问题,并发现“如何在Xcode中更新Swift依赖项”的解决方案可能已经改变了,因为Swift包已经存在了几年。对我来说,解决方案是简单地去File-〉Swift Packages-〉Update to Latest Package Versions。
File
Swift Packages
Update to Latest Package Versions
oxcyiej72#
许多软件包不更新的问题是因为swift软件包版本规则限制了软件包的自动更新只能更新到当前的主要版本,即v3.3.1的软件包会更新到v3.4.0,但不会自动更新到v4.0.1。因此使用Xcode中的更新选项并不一定能获得软件包的最新主要版本。要解决此问题,请从项目面板中打开项目,选择项目(不是目标),然后选择“Swift Packages”选项卡。双击要更新的包,并将最低版本更改为下一个主要版本。
vaj7vani3#
这种方法将保存大量的资源和时间。因为它不会强迫其他软件包重新下载。双击你提到的选项卡中的包,将其版本更改为其他版本,然后它会重新检查远程repo。这样做的好处是只更新所选的包。(另外,最好在包中设置当前使用的版本。)
从文件-〉Swift软件包-〉更新到最新软件包版本
右键单击左侧导航窗格中的包,然后选择“Update Package
请注意,您将看到Xcode说更新所有软件包,但它将只更新选定的一个
tcomlyy64#
您可以像CocoaPods那样在一个单独的项目中管理依赖项,而不是试图保留对生成的项目所做的更改。启动新项目时:1.为您的应用MyApp.xcodeproj创建Xcode项目1.保存为工作区MyApp.xcworkspace1.为你的依赖项创建软件包
MyApp.xcodeproj
MyApp.xcworkspace
mkdir MyDeps && cd MyDeps swift package init --type library
1.添加依赖项到Package.swift1.为依赖项包生成Xcode项目
Package.swift
1.添加生成的项目MyDeps.xcodeproj到你的工作空间MyApp.xcworkspace1.将目标MyDeps.framework添加到应用MyApp.xcodeproj的链接框架通过这个设置,您可以自由地更新Package.swift中的依赖项,并根据需要重新生成依赖项目。
MyDeps.xcodeproj
MyDeps.framework
hmae6n7t5#
我在使用Xcode 12.5时遇到了CryptoSwift的问题。我的版本是1.3.1,这个问题在1.4.0中得到了修复。我尝试了:1.通过文件-〉Swift软件包-〉更新到最新软件包版本进行更新。
dl5txlt96#
如果库被某个特定目标使用,则库不会更新到最新版本,至少在我的情况下是这样(Xcode 14.2)。我正在使用OneSignal,它需要添加一个目标(OneSignalNotificationServiceExtension),该目标依赖于"框架和库"中的OneSignal库。因此:1.从分机中的依赖项中删除所需的LIB语音,1.用右键单击-〉"更新包"更新库1.将"框架和库"中更新的库重新添加到扩展中删除哪一行以使库正确更新的屏幕截图(记得稍后阅读)。
6条答案
按热度按时间lstz6jyr1#
我只是偶然发现了这个问题,并发现“如何在Xcode中更新Swift依赖项”的解决方案可能已经改变了,因为Swift包已经存在了几年。
对我来说,解决方案是简单地去
File
-〉Swift Packages
-〉Update to Latest Package Versions
。oxcyiej72#
许多软件包不更新的问题是因为swift软件包版本规则限制了软件包的自动更新只能更新到当前的主要版本,即v3.3.1的软件包会更新到v3.4.0,但不会自动更新到v4.0.1。因此使用Xcode中的更新选项并不一定能获得软件包的最新主要版本。
要解决此问题,请从项目面板中打开项目,选择项目(不是目标),然后选择“Swift Packages”选项卡。双击要更新的包,并将最低版本更改为下一个主要版本。
vaj7vani3#
-使用Xcode更新单个依赖项
这种方法将保存大量的资源和时间。因为它不会强迫其他软件包重新下载。
双击你提到的选项卡中的包,将其版本更改为其他版本,然后它会重新检查远程repo。这样做的好处是只更新所选的包。(另外,最好在包中设置当前使用的版本。)
-使用Xcode更新所有依赖项
从文件-〉Swift软件包-〉更新到最新软件包版本
🤨带GUI的单个软件包(Xcode 12及以上版本)
右键单击左侧导航窗格中的包,然后选择“Update Package
请注意,您将看到Xcode说更新所有软件包,但它将只更新选定的一个
tcomlyy64#
您可以像CocoaPods那样在一个单独的项目中管理依赖项,而不是试图保留对生成的项目所做的更改。
启动新项目时:
1.为您的应用
MyApp.xcodeproj
创建Xcode项目1.保存为工作区
MyApp.xcworkspace
1.为你的依赖项创建软件包
1.添加依赖项到
Package.swift
1.为依赖项包生成Xcode项目
1.添加生成的项目
MyDeps.xcodeproj
到你的工作空间MyApp.xcworkspace
1.将目标
MyDeps.framework
添加到应用MyApp.xcodeproj
的链接框架通过这个设置,您可以自由地更新Package.swift中的依赖项,并根据需要重新生成依赖项目。
hmae6n7t5#
我在使用Xcode 12.5时遇到了CryptoSwift的问题。我的版本是1.3.1,这个问题在1.4.0中得到了修复。我尝试了:
1.通过文件-〉Swift软件包-〉更新到最新软件包版本进行更新。
但两种方法都不奏效。
我手动去改变目标-〉Swift包-〉版本规则,Xcode自动安装了较新的版本,我走出了我的错误。
dl5txlt96#
如果库被某个特定目标使用,则库不会更新到最新版本,至少在我的情况下是这样(Xcode 14.2)。
我正在使用OneSignal,它需要添加一个目标(OneSignalNotificationServiceExtension),该目标依赖于"框架和库"中的OneSignal库。
因此:
1.从分机中的依赖项中删除所需的LIB语音,
1.用右键单击-〉"更新包"更新库
1.将"框架和库"中更新的库重新添加到扩展中
删除哪一行以使库正确更新的屏幕截图(记得稍后阅读)。