Можно ли скопировать другой список в код пакета приложения?
-
16-09-2019 - |
Вопрос
Мой вопрос изложен выше в заголовке, но я напишу его здесь еще раз.
Можно ли скопировать другой список в код пакета приложения?
На самом деле это немного связано с моим предыдущим вопросом;) Программное создание списка свойств словаря
Но поскольку я могу записать список (и проверить, делаю ли я что-то не так), мне было интересно, смогу ли я скопировать написанный файл.
[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 — это не то место, где вы храните настройки или данные.Вы должны думать о своем пакете приложений как о доступном только для чтения.Вам следует это сделать по нескольким причинам:
- Хотя в большинстве случаев у пользователя системы Mac OS X есть разрешение на запись в приложение, иногда у него его нет.Подумайте о детях, которые не используют учетные записи администратора или лаборатории в школах.
- Это сделает недействительным кодирование.Если вы подпишете свое приложение, это приведет к изменению подписи и нарушению кодового обозначения, вызывая всевозможные странные проблемы (потеря всех разрешений брандмауэра, которые есть у приложения, сообщение пользователю, что приложение изменилось, и повторный запрос разрешения на связку ключей и т. д.).В будущем также могут появляться всевозможные предупреждения, поскольку вмешательство в приложение является серьезным тревожным сигналом безопасности.
- На 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!");
// ...
}