Можно ли скопировать другой список в код пакета приложения?

StackOverflow https://stackoverflow.com/questions/1136166

Вопрос

Мой вопрос изложен выше в заголовке, но я напишу его здесь еще раз.

Можно ли скопировать другой список в код пакета приложения?

На самом деле это немного связано с моим предыдущим вопросом;) Программное создание списка свойств словаря

Но поскольку я могу записать список (и проверить, делаю ли я что-то не так), мне было интересно, смогу ли я скопировать написанный файл.

[testBook writeTofile:@/Users/jack/testbook2.plist" atomically:NO];

в мой пакет приложений в коде (чтобы он мог читать отсюда с помощью NSString *path = [[NSBundle mainBundle] bundlePath]; NSString *dataPath = [path stringbyAppendingPathcomponent:@"testbook2.plist"];

Другая альтернатива также хороша, например, если я могу прочитать свой plist непосредственно по другому пути вместо mainBundle.

Это было полезно?

Решение

Физически да, иногда это возможно.

НЕТ, НЕ ДЕЛАЙТЕ ЭТОГО!!

Хорошо...копировать что-либо в ваш App Bundle — это плохо, ваш App Bundle — это не то место, где вы храните настройки или данные.Вы должны думать о своем пакете приложений как о доступном только для чтения.Вам следует это сделать по нескольким причинам:

  1. Хотя в большинстве случаев у пользователя системы Mac OS X есть разрешение на запись в приложение, иногда у него его нет.Подумайте о детях, которые не используют учетные записи администратора или лаборатории в школах.
  2. Это сделает недействительным кодирование.Если вы подпишете свое приложение, это приведет к изменению подписи и нарушению кодового обозначения, вызывая всевозможные странные проблемы (потеря всех разрешений брандмауэра, которые есть у приложения, сообщение пользователю, что приложение изменилось, и повторный запрос разрешения на связку ключей и т. д.).В будущем также могут появляться всевозможные предупреждения, поскольку вмешательство в приложение является серьезным тревожным сигналом безопасности.
  3. На iPhone это не будет работать.Это может не быть проблемой, но если вы собираетесь использовать этот код на iPhone, пакеты приложений помещаются в изолированную программную среду только для чтения.

Правильное место для размещения подобных материалов — это подпапка папки «Поддержка приложений».

Другие советы

Я не знаю точно, что вы делаете, но в зависимости от вашего приложения вы можете использовать каталог поддержки приложений:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
if ([paths count] > 0) {
    NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"App Name"];
    // Create the directory if it doesn't exist, etc.
} else {
    NSLog(@"Fail!");
    // ...
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top