安装时应用程序无法正常运行

时间:2011-09-17 17:32:53

标签: objective-c macos cocoa nsbundle

我的Mac OS X应用程序出现了一个奇怪的问题。我有一个在辅助线程中运行的进程。该过程在for循环中以用户指定的次数重复某个动作。

对于for循环的每次迭代,都有一个用字符串文件的内容初始化的字符串。如果字符串文件的内容等于"YES",则循环中断(默认情况下文件设置为"NO")。当用户想要停止循环时,他们点击“停止”按钮,该按钮将文件的内容设置为"YES"

当我在Xcode中运行应用程序并将应用程序导出为.app时,这实际上很有用。当我实际将应用程序转换为pkg并安装它时,会出现问题。停止功能不再正常运行。关于问题是什么,我很难过。我正在使用[NSBundle mainBundle]初始化我对文件的所有引用,所以我应该在我的应用程序包中引用该文件。

编辑:我实际上决定切换到检查循环中的原子BOOL值,当按下停止按钮时,我会更改该值。对我来说,这似乎是一个更简单的解决方案。

1 个答案:

答案 0 :(得分:5)

由于出于安全原因,普通用户无权修改/ Application文件夹中安装的应用程序。此外,如果不使签名代码无效,则无法修改已签名的应用程序(即通过App Store销售的任何应用程序)。

从不,永远,依赖可修改的应用程序包。它永远不应该是。对于与应用相关的非文档文件,始终 use standard user data folders喜欢“〜/ Library / Application Support /”或“〜/ Library / Caches /”。

对于您的一般方法,重复轮询文件 - 特别是在紧密循环中 - 是磁盘活动的批次。 “笔记本电脑Killah”将是该应用程序的一个好名字。 :-)你应该考虑改变这种方法。如果你在另一个问题(你正在做什么以及为什么)中提供更多细节并征求建议,我几乎肯定会有一些更好的方法,不会像用户那样嘲笑用户的电池电量 - 在杂货店里唠叨老鼠。

另外,我猜你永远不会检查你的文件是否写得成功。标准-writeToURL / File:...方法返回BOOL以指示成功或失败,并设置NSError(如果您将指针传递给一个),并提供更多详细信息。养成忽略这一点的习惯。在这种情况下,您可能已经找到了自己的答案,因为您已经知道代码的中断位置。从那里开始,找出原因并不是一个巨大的飞跃。