Приложение не работает правильно при установке - PullRequest
1 голос
/ 17 сентября 2011

У меня странная проблема с моим приложением для Mac OS X. У меня есть процесс, который выполняется во вторичном потоке.Процесс повторяет определенное действие указанное пользователем количество раз в цикле for.

На каждой итерации цикла for существует строка, которая инициализируется содержимым файла строк.Если содержимое файла строк равно "YES", то цикл прерывается (по умолчанию для файла установлено значение "NO").Когда пользователь хочет остановить цикл, он нажимает кнопку «Стоп», которая устанавливает содержимое файла на "YES".

Это на самом деле прекрасно работает, когда я запускаю приложение в Xcode и когда я экспортирую приложение как .app.Проблема возникает, когда я на самом деле превращаю приложение в pkg и устанавливаю его.Функция останова больше не работает правильно.Я довольно озадачен тем, в чем проблема.Я инициализирую все свои ссылки на мой файл, используя [NSBundle mainBundle], поэтому я должен ссылаться на файл в своем пакете приложения.

РЕДАКТИРОВАТЬ: Я на самом деле решил переключиться на проверку атомарного значения BOOL в цикле, который яизменить при нажатии кнопки остановки.Мне кажется, это более простое решение.

1 Ответ

5 голосов
/ 17 сентября 2011

Обычные пользователи не имеют права изменять приложения, установленные в папке / Application, из соображений безопасности.Кроме того, подписанные приложения (т. Е. Любое приложение, продаваемое через App Store) не могут быть изменены без признания недействительным подписанного вами кода.

Никогда, никогда не полагается на возможность модификации пакета приложения.Это никогда не должно быть. Всегда использовать стандартные папки пользовательских данных , например, "~ / Library / Application Support /" или "~ / Library / Caches /" для файлов, не связанных с приложением.

Что касается вашего общего подхода, многократный опрос файла - особенно в тесном цикле - это много дисковой активности.«Ноутбук Killah» будет хорошим названием для приложения.:-) Вы должны рассмотреть возможность изменения этого подхода в целом.Если вы предоставите более подробную информацию в другом вопросе (что вы делаете и почему) и попросите дать предложения, я почти уверен, что найдется несколько лучших способов, которые не будут разжижать заряд батареи ваших пользователей, как трещина -крысы в ​​продуктовом магазине.

Кроме того, я полагаю, вы никогда не проверяете, успешно ли записан ваш файл.Стандартные методы -writeToURL / File: ... возвращают BOOL для оповещения об успехе или неудаче, а также устанавливают NSError (если вы передаете указатель на один из них) с более подробной информацией.Привыкайте не игнорировать это.В этом случае вы могли бы найти свой собственный ответ, потому что знали бы, где ваш код нарушается.Оттуда не было бы огромного скачка, чтобы выяснить, почему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...