升级到 iPhone SDK 3.0 导致 UIKit 问题

Posted

技术标签:

【中文标题】升级到 iPhone SDK 3.0 导致 UIKit 问题【英文标题】:Upgrade to iPhone SDK 3.0 Causing UIKit Problems 【发布时间】:2009-06-19 03:16:39 【问题描述】:

我有一个正在处理的现有项目,我最近决定更新我的 iPhone SDK 并更新到最新的 3.0 SDK。

我更新了我的 SDK 并打开了我现有的项目。果然有一些问题,包括一些证书问题等等。无论如何,谷歌和我能够解决大部分问题,但我希望成为我的最后一个问题没有任何运气。

在模拟器中运行我的程序时,我现在得到

dyld:库未加载: /System/Library/Frameworks/UIKit.framework/UIKit 参考自: /Developer/iGameLib/iGameLib/build/Debug-iphonesimulator/iGameLib.app/iGameLib 原因:找不到图像

现在,我发现 UIKit 已经移到了

/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0sdk/ 系统/库/FrameWorks/UIKit

我已经更新了我的目标和项目设置以指向那个新的框架位置,但是当我构建它时,还是没有运气。

我也试过清除模拟器的应用和设置,还是不行。

当我运行“干净”菜单项时,引用的 .app 被清除,我已经确认了这一点,所以很明显我的项目设置中的某些东西仍然指向使用旧的 UIKit 位置。

我应该去哪里看?

我已尽我所能帮助自己,但恐怕我在这里不知所措。我在目标设置、项目设置、plist 或项目中的任何其他文件下都看不到它。

【问题讨论】:

【参考方案1】:

我遇到了同样的错误

dyld:库未加载:/System/Library/Frameworks/UIKit.framework/UIKit

我的解决方案是退出 Xcode 并重试。

【讨论】:

成功了!苹果为什么要聘请微软来制作新版本的 xCode?​​span> 【参考方案2】:

好的,我有答案了!!!

很简单,Xcode 并未正确更改实际 .xcodeproj 文件中的所有变量。所以,这是我采取的步骤。

离开 Xcode,你必须在终端完成这项工作。打开一个终端并转到您的项目所在的位置。找到您的 .xcodeproj 并像目录一样进入它。它看起来像 finder 中的实际文件,但它是那些包目录之一。

现在,我无法让 textedit 允许我编辑它,但你可以进入 nano,就像我一样

sudo nano project.pbxproj 位于我的 .xcodeproj 文件/文件夹/包/whatever 下。

在此文件中,您需要找到设置 SDKROOT 的位置。可能有几个地方引用了它,但您正在寻找 SDKROOT = iphoneos2.2.1 或类似的东西。将所有这些(有几个)更改为 SDKROOT = iphoneos3.0

现在,你已经成功了一半。执行 ctrl x 并保存文件。接下来,您将执行 ls 并找出 .pbxuser 文件是什么。我的是 myname.pbxuser。运行与

相同的命令

sudo nano myname.pbxuser

在这个文件中,有大量对 2.1 iphone sdk 目录的引用。搜索/替换 iPhoneSimulatorOLDVERSION.sdk,在我的例子中是 iPhoneSimulator2.1.sdk 并将 2.1 更改为 3.0。不过要非常小心,我不想知道当你把这个文件弄乱时会发生什么。

保存并打开 xcode。清理项目并构建并运行。快!

【讨论】:

Zach 的解决方案是正确的答案。我必须说,我很惊讶那些简单地说创建一个新项目的新回复有更多的赞成票。 您不需要这样做(事实上,您的项目中不应该有“大量”特定于 SDK 的路径)。您唯一需要做的是 Project > Edit Project Settings > General 并从那里选择新的 SDK。如果您的项目中有其他特定于 SDK 的路径,您是否直接从 Finder 将框架拖到项目中,而不是使用“添加现有框架”表选择它们?如果是这样,请检查目标中的“框架搜索路径”并删除可能存在的 SDK 特定路径。【参考方案3】:

    检查您的目标设置 确保您实际链接到 Target 中的所有这些框架(检查“将二进制文件与库链接”下)

    确保您已选择 3.0 sdk 作为基础 SDK

    创建一个空白项目并像以前一样添加您的框架;如果仍有问题,可能是 SDK 安装失败

顺便说一句,您不必重新添加 sdk 框架,因为路径是相对于当前 SDK 的

只是想提供帮助……不确定我可以从这里调试:)

【讨论】:

那么你去哪里把3.0 sdk改成你的基础sdk呢?我在想这可能是问题所在。如果将构建目标更改为“Simulator - 3.0 | Debug”那么简单,那么我已经完成了。 iPhone 基础 SDK 位置是否缺少其他设置? 项目 > 编辑项目设置 > 常规 > 基础 SDK。确保您的特定目标(项目 > 编辑目标设置 > 构建 > 基础 SDK)没有覆盖所有目标共享的项目设置。【参考方案4】:

我在 Xcode 上遇到过一些类似的问题,似乎没有明显的原因。事实是,Xcode 仍然到处都有 bug,有时你会碰壁。

我的经验: 与您的情况有点类似,在一个特定的场合,我正在工作的一个 Xcode 项目由于某种神秘的原因而停止构建,并且没有提供任何清洁、谷歌搜索或 SO-ing我有任何答案。所以我简单地创建了一个 FRESH,NEW 项目,并将我损坏的项目中的源代码填充到新项目的源代码中。新项目使用相同的源、库、资源、设置,请注意——但它的构建没有任何问题。转移大约需要 20 到 25 分钟,但考虑到我花了几个小时试图解决一个不会在损坏的项目中暴露出来的错误,所以时间非常值得。

所以,我建议做我所做的事情:也许尝试创建一个新项目并将您的旧源和资源转移过来。

祝你好运

【讨论】:

使用 SCM 系统或 Xcode 的内置快照,如果您遇到这种情况,您可以回滚到项目文件的先前版本,甚至可以将损坏的项目与正在运行的项目进行比较以查看发生了什么变化。作为最后的手段,在重新创建项目之前,有很多工具可以尝试。【参考方案5】:

我刚刚从“Frameworks”文件夹中删除了 UIKit.framework,右键单击并再次将其添加回来。 干净的构建,没问题..

【讨论】:

我遇到了同样的问题,这也是我修复它的方法。 xcode 试图在错误的目录中找到框架,因此重新添加它会为 xcode 提供正确的路径。【参考方案6】:

我在使用 Xcode 3.2.1 时遇到了同样的问题,但它以更简单的方式解决了。我意识到我最近禁用了目标的环境变量,特别是与内存调试有关的环境变量(NSDebugEnabled、NSZombieEnabled、NSAutoreleaseFreedObjectCheckEnabled、MallocStackLogging、MallocStackLoggingNoCompact)。移除环境变量后,该应用在模拟器中运行过一次,但此后再也没有运行过。

退出 Xcode、模拟器、重新启动 Xcode 并彻底清除目标(当然包括它的依赖项)使我恢复了良好状态。

【讨论】:

【参考方案7】:

在没有调试的情况下启动我的应用程序时出现同样的问题。 根据我的经验,生成的二进制文件似乎不是罪魁祸首。

我从 xcode 向导创建了一个应用程序,它确实在模拟器中启动正常(我们称之为 testApp,我的应用程序被称为 myApp),我试图找出我的应用程序的不同之处。

otool -L myApp 为框架提供正确的(相对路径),与 testApp 相同

ps -E ld 定位框架所需的 DYLD_ROOT_PATH、DYLD_FALLBACK_FRAMEWORK_PATH、DYLD_FRAMEWORK_PATH、DYLD_LIBRARY_PATH 环境变量 与启动 testApp 时这些变量的值相比,myApp 还可以

我怀疑问题出在应用程序启动后 XCode 和模拟器之间的通信中……尽管我找不到问题所在……

有效的解决方案(至少对我而言)肯定有一些很大的副作用,但它是: 退出 xcode 浏览包 myApp.xcodeproj 的内容 解锁.model1v3和.pbxuser进行修改(信息面板中的锁(文件上的cmd-I)) 删除这两个文件 启动 xcode 并重试从那里启动您的应用程序

【讨论】:

以上是关于升级到 iPhone SDK 3.0 导致 UIKit 问题的主要内容,如果未能解决你的问题,请参考以下文章

MAP 与 iPhone 3.0 SDK 一起使用都有哪些限制?

iPhone SDK 3.0 针对 2.2.1 SDK

XCode 3.2 未检测到 iPhone SDK 3.0

为 iPhone 4 SDK 构建的 Blocks 在部署到 iPhone OS 3.0 时可以工作吗?

在 iOS 上将 FBConnect SDK 升级到 FacebookSDK 3.0 时缺少 FBRequestDelegate

在 iPhone 3.0 SDK 中为 MoviePlayer 添加自定义控件