Couldn't find platform family in Info.plist CFBundleSupportedPlatforms or Mach-O LC_VERSION_MIN

本文介绍了解决iOS应用打包过程中出现的特定错误的方法。通过在受影响的第三方库的Info.plist文件中添加支持平台配置,成功解决了该问题。适用于使用最新Xcode版本的开发者。

RT

昨天在导发布包的时候遇到这个问题,通过和渠道sdk的同事不停的调试,终于解决。分享一下,希望同行少走点弯路。

在工程Build Phases->Copy Bundle Resources下面的库(一般是渠道sdk或是别的第三方库)的Info.plist(如果没有就添加一个Info.plist文件)中添加如下内容:

<key>CFBundleSupportedPlatforms</key>
 <array>
 <string>iPhoneOS</string>
 </array>

重新打包就可以解决。

iPhoneOS的地方可以扩展到别的平台,这里是指手机,如果是mac则填写MacOSX。

当然前提是开源的库或者可以联系到库作者的情况下。如果是自己网上找的第三方库,就只能弃用这个库。我怀疑是和开发环境有关系,我用的是最新的xcode7,所以也可以用xcode6尝试一下。

你遇到的错误: ``` You must specify the URL of the appcast as the SUFeedURL key in either the Info.plist, or with -[SPUUpdaterDelegate feedURLStringForUpdater:] for SparkleUpdate! ``` ### 🔴 错误含义: Sparkle **找不到你的更新列表(appcast)地址**,必须通过以下两种方式之一指定: 1. 在 `Info.plist` 中设置 `SUFeedURL` 2. 或者在代理方法中动态返回 feed URL --- ## ✅ 解决方案:正确配置 Sparkle 的 `SUFeedURL` ### ✅ 方法一:在 `Info.plist` 中直接添加 `SUFeedURL`(推荐新手) 这是最简单、最常见的方式。 #### 步骤 1:打开 `Info.plist` 右键点击你的项目中的 `Info.plist` → Open As → Source Code(或 Property List) #### 步骤 2:添加 `SUFeedURL` 键值 ```xml <key>SUFeedURL</key> <string>https://yoursite.com/appcast.xml</string> ``` 📌 替换为你的实际 appcast 地址。例如: ```xml <key>SUFeedURL</key> <string>https://example.com/SparkleDemoApp/appcast.xml</string> ``` > 💡 提示:开发测试时可以用本地服务器模拟,比如用 Python 起一个: > > ```bash > python3 -m http.server 8000 > ``` > > 然后设为: > ```xml > <string>http://localhost:8000/appcast.xml</string> > ``` --- ### ✅ 方法二:使用代理方法动态提供 `feedURL`(高级用法) 如果你需要根据不同环境(开发/生产)切换 feed 地址,可以实现 `SPUUpdaterDelegate`。 #### 示例代码(Swift + AppDelegate): ```swift import Cocoa import Sparkle class AppDelegate: NSObject, NSApplicationDelegate, SPUUpdaterDelegate { var updaterController: SPUStandardUpdaterController! func applicationDidFinishLaunching(_ notification: Notification) { // 初始化 updater,并传入 self 作为 delegate updaterController = SPUStandardUpdaterController( startingUpdater: true, updaterDelegate: self, userDriverDelegate: nil ) // 创建窗口等 UI... } // MARK: - SPUUpdaterDelegate func feedURLString(for updater: SPUUpdater) -> String? { #if DEBUG return "http://localhost:8000/appcast.xml" #else return "https://yoursite.com/appcast.xml" #endif } } ``` ⚠️ 注意: - 使用此方法时,**不要**在 `Info.plist` 中设置 `SUFeedURL`,否则会冲突或被忽略。 - 你可以根据 build configuration 动态返回不同地址。 --- ### ✅ 验证是否成功 1. 清理构建:`Product → Clean Build Folder` 2. 重新运行应用 3. 点击“检查更新”按钮 4. 应该不会再出现上述错误,而是显示: - “正在检查更新…” - 如果找不到文件,则提示“没有可用更新”或网络错误(说明已连接) --- ### ❗ 常见陷阱 | 问题 | 解决办法 | |------|---------| | 忘记加 `http://` 或 `https://` | URL 必须是完整格式 | | 拼写错误 `SUFeedUrl`(小写 l)| 必须是 `SUFeedURL`(全大写) | | 使用了代理但没实现方法 | 实现代理后必须返回有效字符串 | | App Sandbox 开启但未允许网络访问 | 在 `.entitlements` 中启用 `Outgoing Connections (Client)` | --- ### ✅ 补充建议:如何生成 appcast.xml? 你可以使用官方工具自动生成: 👉 [Sparkle Feed Generic Archiver](https://github.com/sparkle-project/Feed-Generic-Archiver) 步骤简述: 1. 打包你的应用为 `.app` 2. 使用该工具打包成 `.zip` 并签名 3. 自动生成带签名信息的 `appcast.xml` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值