2013-04-22 4 views
1

У меня есть Webservice, чтобы загрузить некоторые новости и записать их в файл plist где-то в NSLibraryDirectory, вот и все. Но если у пользователя нет подключения к Интернету или webservice отключен или что-то еще, я загружаю Default-Newsfile из AppBundle.Запишите файл в App Bundle

В настоящий момент я должен заменить файл по умолчанию вручную перед каждым AppStoreUpdate, чтобы обновлять его.

Мой вопрос: есть ли простой способ записи в приложение Bundle при отладке через Simulator, поэтому Default-File будет обновляться каждый раз.

Я учил о чем-то вроде:

#ifdef SIMULATOR 
    //Write to AppBundle 
#endif 

Примечание: Это все о времени, в то время как я использую Mac и Simulator, я не хочу, чтобы сделать это в App Опубликовано! Да, я уже заменяю Ressource в своем пакете, но вручную, и я хочу, чтобы он реализовывался автоматически. Я хочу, чтобы моя проектная папка обновилась, прежде чем компилировать ее для любого устройства или AppStore.

+0

Вопрос не ясен. Это то, что вы хотите - при работе в режиме отладки, загружать новости из Интернета и сохранять их в файл, который позже может быть отправлен * как часть пакета приложений? – Mar0ux

+0

Точно, но я не хочу ничего копировать из Документов в мою папку проекта, поэтому я могу поделиться проектом с моими коллегами без каких-либо объяснений. И никто не забудет обновлять новостные файлы в будущем. – xapslock

ответ

1

Хорошо, основанный на ваш комментарий, здесь что вам нужно (я думаю - все еще не совсем понятно на вопрос, но дайте мне знать, если это сработает для вас).

  • Создайте пустой файл (например, news.plist) в папке проекта (SRCROOT). Добавьте это в свое репо.
  • Добавьте этот файл в ресурсы вашего проекта и добавить его в Copy Bundle Resources шаг в Build Phases
  • При загрузке содержимого из Интернета, сохранять его во временную папку проекта, а затем скопировать его в SRCROOT/news.plist перезапись существующего файла (при необходимости добавить проверка контрольной суммы файла, чтобы избежать ненужных изменений). Этот шаг требуется ТОЛЬКО при работе на симуляторе.
  • Всякий раз, когда регистрация разработчиков, обновленный news.plist должен быть включен в репо.

Чтобы сделать SRCROOT доступным в коде, добавьте SRCROOT=\"${SRCROOT}\" в GCC_PREPROCESSOR_DEFINITIONS.

Другим разработчикам не нужно ничего делать, кроме последнего шага - каждый раз, когда он изменяется, проверяйте обновленный файл.

Помогает ли это?

+0

В вашем пункте 3: «затем скопируйте его в SRCROOT/news.plist», вот с чем я борюсь. Как это сделать автоматически? Как получить доступ к SRCROOT в функции или для чего нужен другой вид магии? – xapslock

+0

см. Мое редактирование .... – Mar0ux

+0

Вот и все, спасибо. Такая большая проблема и ответ просто так просты. – xapslock

1

Нет, возможно, вам удастся заставить симулятор написать вам приложение Bundle, но это не означает, что файл, который будет скомпилирован при создании для магазина приложений, будет обновлен.

Почему бы просто не сохранить новый каталог документов, а затем всегда загружать этот файл. После запуска приложения запустите фоновый поток и попробуйте обновить файл plist. Вам удастся получить новости о записи файла plist в каталоге документа. Таким образом, у пользователя будет файл, который был получен в последний раз, когда устройство смогло получить файл.

Вы можете добавить файл в комплект приложения, который вы копируете в каталог документов при первом запуске приложения, просто чтобы убедиться, что у пользователя есть данные в приложении.

+0

Да, это то, что я уже делаю. У меня есть «default» -Plist в наборе приложений, и я делаю это более или менее, как вы сказали, но я бы предпочел написать или скопировать файл непосредственно в правильную папку автоматически во время отладки, поэтому я не забуду это когда-нибудь , – xapslock

+0

Тогда вам придется использовать какой-то прекомпилированный скрипт. – rckoenes

6

AppBundle является Read-only вы не можете ничего писать в него программно, однако при обновлении ресурсов в вашем Project через Xcode, вы получите обновленный файл автоматически в AppBundle ..

+0

В то время как на Mac с симулятором я должен писать везде, где хочу, или нет? Я не говорю об опубликованном приложении! – xapslock

+0

Нет, где вы не можете писать ни на одном устройстве .. AppBundle доступен только для чтения .. Он просто не работает. Кстати, вы можете поместить свой файл по умолчанию в «Каталог документов», это «Чтение-Запись», вы можете обновить файл там в этой папке легко программно .. – iphonic

+0

Я никогда не говорил, что хочу писать на устройстве. – xapslock

Смежные вопросы