Hi n n,
In general that should work.
Which API do you use to get the URL to the index.html file? It should be something similar to
[[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html"subdirectory:@"YOUR_SUBDIRECTORY"]];
Best regards,
Andreas
You can't use NSBundle mainBundle to write to at run time. That is only for static files as the SDK example has . My files are written to NSCachesDirectory and I get them using
NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
Have tried the above also with NSLibraryDirectory or NSDocumentDirectory but all still give the same error
NSBundle URL: file:///var/containers/Bundle/Application/
Caches URL: file:///var/mobile/Containers/Data/Application/
Can you please try your side?
Hi n n,
I just mentioned NSBundle here because the return value of that method is what the WTArchitectView -load method is expecting.
Can you please post the complete code that you use to get the URL to your .html file?
Best regards,
Andreas
NSURL *indexFileURL = nil; NSLog(@"APP_DELEGATE PATH: %@", APP_DELEGATE.dataManager.tempCachePath); for (ARDataEntity *arDataEntity in data) { NSURL *url = [NSURL fileURLWithPath:[arDataEntity fileNameWithPath] relativeToURL:APP_DELEGATE.dataManager.tempCachePath]; if ([[url lastPathComponent] isEqual: @"index.html"]) { if ([[NSFileManager defaultManager] fileExistsAtPath: [arDataEntity fileNameWithPath]]) { NSLog (@"path %@", url); //works } indexFileURL = url; self.tempfile = url; NSLog (@"INDEX file path: %@", indexFileURL); // /var/mobile/Containers/Data/Application/71BBD047-53DE-4DD9-843C-EC83E42D2298/Library/Caches/TempFileCache/ar_worlds/locator/index.html break; } } self.augmentedRealityExperience = [[WTAugmentedRealityExperience alloc] initWithTitle:title groupTitle:groupTitle URL:indexFileURL requiredFeatures:requiredFeatures startupParameters:startupParameters requiredViewControllerExtension:nil]; [self startLocationUpdatesForPoiInjection];
Hi n n,
The important point here is the format of the url that you're giving to the SDK. What the SDK (the internal UIWebView) needs is a URL in the following format:
file:///var/containers/Bundle/Application/5F1B8DC9-89F4-4E12-B90B-446BB5A27A13/DevApplication.app/ImageOnTarget/index.html
The NSBundle usually returns such urls.
code: [[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html" subdirectory:@"ImageOnTarget"]
You just need to use a Cocoa API that return a file url in the same format but pointing to the e.g. tmp directory.
Your log from line 22 outputs a url that is missing the `file:///` prefix. You get such a url with the following code:
NSURL *fileURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:@"architect/ImageOnTarget/index.html"] isDirectory:NO];
output: file:///private/var/mobile/Containers/Data/Application/1D667591-4DFA-4679-BA6E-DD2DF783D1EC/tmp/architect/ImageOnTarget/index.html
I was able to load an Architect World from the temporary directory using the [NSURL fileURLWithPath] method.
architect view finished load of world at url: file:///private/var/mobile/Containers/Data/Application/E10409CB-442E-48D7-BE98-6E85E6F68EF8/tmp/architect/ImageOnTarget/index.html
Can you try using the +fileURLWithPath method in your project? You can also implement the -architectView: didFailToLoadArchitectWorldNavigation:withError: method and log the error description to get an idea why it's not working for you.
Please let me know if the +fileURLWithPath method is working for you.
Best regards,
Andreas
n n
Are storing files outside the app bundle in iOS a problem with the SDK? I store them at run time in the XCode NSCachesDirectory ( have also tried NSLibraryDirectory), and before sending it to the AugmentedRealityExperience alloc init method
self.augmentedRealityExperience = [[WTAugmentedRealityExperience alloc] initWithTitle:title
groupTitle:groupTitle
URL:indexFileURL
requiredFeatures:requiredFeatures
startupParameters:startupParameters
requiredViewControllerExtension:nil];
the above returns an object and I also checked that the file exists first. The architect world though fails to load via the delegate method .. architectView didFailToLoadArchitectWorldNavigation:.. method:
did fail to load navigation 'navigation:
original URL: '
file:///var/mobile/Containers/Data/Application/AD11E025-AF00-4E16-9F20-31E311B50F2D/Library/TempFileCache/ar_worlds/atm_locator/index.html'
I know with the sample the files are in the app bundle but I want to get my files from a server in case I need to dynamically change them, and can't put them into the apps bundle at run time.
Many thanks