При разработке под iOS время от времени у заказчиков, да и у некоторых программистов возникает закономерный вопрос: «А можно ли каким-нибудь образом при старте приложения подменять картинку?».
Немного порыскав по интернету, и покопавшись в документации, то напрашивается ответ, что сделать это невозможно по следующим причинам:
Однако, все же, это возможно сделать стандартными способами, без всякого рода Jailbreak'а. Впрочем, как и у каждого решения есть свои плюсы, минусы и особенности.
Так как менять внутри папки с приложением мы ничего не можем, то и не будем даже пытаться. Вполне возможно, найдутся умельцы, которые смогут это сделать, но речь сейчас не о них.
Итак, разместим Default.png в папке Documents.
Теперь, предполагая, что Default.png размещен в данной папке, поставим в Info.plist относительный путь:
Вуаля! Запускаем. Все работает.
Хм. Допустим, если с относительным путем к файлу Default.png все ясно, то как все-таки положить Default.png в папку Documents?
Программно. При первом запуске программы, его необходимо скопировать из того-же Bundle. На самом деле здесь уже есть пару вариантов — скачать Default.png из интернета, сгенерировать его на лету, подложить вместо Default.png только что снятую фотографию. Все зависит от специфики приложения.
Например, это может выглядеть следующим образом:
Особенностью(основным минусом) данного метода является то, что splash не будет виден при первой загрузке, т.к.нет никакой возможности пока не было найдено возможности сразу при установке приложения записать что-то в папку Documents.
P.S. Формально данный методне нарушает нарушает HIG, а именно: ...All launch images must be PNG files and must reside in the top level of your application’s bundle directory… и… When the system launches an application, it temporarily displays a static launch image on the screen…
Так что, использование данного метода в App-Store под большим вопросом.
Кроме этого, не совсем ясно, как данный метод будет работать в случае локализации приложения.
Но, если все вышеперечисленное Вас устраивает, то можете смело использовать данный метод.
Немного порыскав по интернету, и покопавшись в документации, то напрашивается ответ, что сделать это невозможно по следующим причинам:
- Файл, который показывается при запуске приложения лежит внутри папки приложения, и, ак следовательно переписать его не является возможным
- По аналогичной причине нельзя изменить файл Info.plist, в котором сохраняется относительный путь к файлу стартовым изображением
Однако, все же, это возможно сделать стандартными способами, без всякого рода Jailbreak'а. Впрочем, как и у каждого решения есть свои плюсы, минусы и особенности.
Решение
Так как менять внутри папки с приложением мы ничего не можем, то и не будем даже пытаться. Вполне возможно, найдутся умельцы, которые смогут это сделать, но речь сейчас не о них.
Итак, разместим Default.png в папке Documents.
Теперь, предполагая, что Default.png размещен в данной папке, поставим в Info.plist относительный путь:
Вуаля! Запускаем. Все работает.
Хм. Допустим, если с относительным путем к файлу Default.png все ясно, то как все-таки положить Default.png в папку Documents?
Программно. При первом запуске программы, его необходимо скопировать из того-же Bundle. На самом деле здесь уже есть пару вариантов — скачать Default.png из интернета, сгенерировать его на лету, подложить вместо Default.png только что снятую фотографию. Все зависит от специфики приложения.
Например, это может выглядеть следующим образом:
// получаем путь к папке Documents
NSArray* dirs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsPath = [dirs objectAtIndex:0];
NSString * splashDest = [documentsPath stringByAppendingPathComponent:@"Splash.png"];
NSString * splashSrc = [[NSBundle mainBundle] pathForResource:@"Splash" ofType:@"png"];
// Копируем Splash.png
NSFileManager * fm = [NSFileManager defaultManager];
[fm copyItemAtPath:splashSrc toPath:splashDest error:nil];
Особенностью(основным минусом) данного метода является то, что splash не будет виден при первой загрузке, т.к.
P.S. Формально данный метод
Так что, использование данного метода в App-Store под большим вопросом.
Кроме этого, не совсем ясно, как данный метод будет работать в случае локализации приложения.
Но, если все вышеперечисленное Вас устраивает, то можете смело использовать данный метод.