У меня есть приложение , использующее ARKit . До текущей сборки все ресурсы были включены в сам комплект приложения, и пользователи, похоже, не сталкивались с проблемой использования приложения.
Однако я хотел включить On-Demand Resource в приложении, чтобы ресурсы новых модулей (игр) можно было загружать из AppStore, таким образом избегая большого размера приложения. Следуя документации iOS, я смог использовать ODR, и приложение работало на моем устройстве. Он загружал ресурсы, используя ODR, как и должно быть.
Однако при загрузке в AppStore for App Review я обнаружил ошибку:
![enter image description here](https://i.stack.imgur.com/sY2AI.png)
Структура моей папки для конкретной папки SCNAssets (которая помечена) приведена ниже:
![enter image description here](https://i.stack.imgur.com/qU2Km.png)
Обратите внимание, что приложение отлично работает с использованием ODR на моем устройстве. Я сделал следующее и попробовал несколько раз, но безрезультатно.
- Создание чистой сборки.
- Изменение версии / сборки.
- Убедитесь, что ODR включен в настройках сборки и т. Д. - все гигиенические действия. И это
все XCode, нет платформы, которую я использую (например, Xamarin,
и др.)
- Использование существующих решений, связанных с SO.
Apple не так много документации по вопросам, связанным с загрузкой AppStore для приложений с поддержкой ODR. Мне интересно, есть ли в папке ресурсов с тегами, у нас также могут быть и другие папки, так как моя структура папок прямо сейчас - не уверен, может ли это быть причиной, поскольку приложенная ошибка указывает на все папки в структуре моей папки ,
Помощь будет высоко ценится. На данный момент я убрал свою зависимость от ODR и создал без нее, однако это не может продолжаться долго.
Примечание. Все ресурсы - это файлы scn, системы частиц scn и изображения.
Код для доступа к ODR приведен ниже (с краткостью), однако, если этот код работает с моим устройством, он должен работать в другом месте. Я думаю, что проблема может быть связана с расположением папок.
Диспетчер ODR:
class ODRManager {
static let shared = ODRManager()
var currentRequest: NSBundleResourceRequest?
var currentProgressFractionCompleted: Double?
func requestSceneWith(tag: String, onSuccess: @escaping () -> Void, onFailure: @escaping (NSError) -> Void) {
currentRequest = NSBundleResourceRequest(tags: [tag])
guard let request = currentRequest else { return }
request.beginAccessingResources { (error: Error?) in
if let error = error {
onFailure(error as NSError)
return
}
onSuccess()
}
}
}
Доступ к ODR в ViewController
// tagName is the name of the tag on the ODR related scnassets folder.
ODRManager.shared.requestSceneWith(tag: tagName, onSuccess: {
DispatchQueue.main.async {
self.game = self.gameFactory.createGame(...)
}, onFailure: { (error) in
self.threeSurfaceLabel.text = "Problem with downloading content. Make sure internet connection is working, and restart."
})