Ard*_*ori 14 app-store cordova
每次更改appStore时,是否可以在不提交应用程序的情况下更新phonegap中的WWW文件夹内容?它有任何法律问题吗?
Mic*_*ael 21
简短回答 - 是的,你可以 - 但你需要重新定位www才能写入它.
答案很长 - 收紧你的短裤朝圣者,这可能会变得坎坷......
因此,当您打包应用程序时,应用程序包中包含您的www目录以及PG自包含Web应用程序的所有各种各样的部分.作为应用程序包的一部分的所有内容都是静态的 - 因此无法写入.但是,您可以为您的应用程序写入NSDocumentDirectory - 它是私有沙盒存储区域.
第一步是(在启动时)将您的www文件夹复制到NSDocumentDirectory中.
其次,您需要覆盖CDVCommandDelegateImpl pathForResource方法,以便将PG指向新的www位置.
此时,您的应用应该像应用包中包含的那样运行.一个值得注意的例外是现在可以修改每个文件.
我的应用程序是一个基本产品,可以有附加内容.如果我包含所有附加内容,该应用程序的大小将为几百MB.因此,我将基本应用程序包含在一个(样本)数据包中,并且当用户需要扩展产品时,他们会选择其他数据包,这些数据包会被下载,提取并复制到www文件夹的相应子目录中,因为它存在于NSDocumentDirectory.
作为奖励,如果我发现HTML中的错误 - 或想要添加功能,我可以这样做而无需重新提交应用程序.我需要重新提交应用程序的唯一原因是,如果有一个Objective-C错误修复程序.
小智 19
这只是加入迈克尔的答案.
1)将您的www文件夹复制到NSDocumentDirectory: - 对于phonegap ios,将其添加到/ProjectName/Classes/AppDelegate.m
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
CGRect screenBounds = [[UIScreen mainScreen] bounds];
self.window = [[[UIWindow alloc] initWithFrame:screenBounds] autorelease];
self.window.autoresizesSubviews = YES;
self.viewController = [[[MainViewController alloc] init] autorelease];
//self.viewController.useSplashScreen = YES;
// Set your app's start page by setting the tag in config.xml.
// If necessary, uncomment the line below to override it.
// self.viewController.startPage = @"index.html";
// NOTE: To customize the view's frame size (which defaults to full screen), override
// [self.viewController viewWillAppear:] in your view controller.
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"AppFirstLaunch"])
{
NSLog(@"App already launched!");
}
else
{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"AppFirstLaunch"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"App launched for first time!");
BOOL success1;
NSError *error1;
NSFileManager *fileManager1 = [NSFileManager defaultManager];
fileManager1.delegate = self;
NSArray *paths1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory1 = [paths1 objectAtIndex:0];
NSString *writableDBPath1 = [documentsDirectory1 stringByAppendingPathComponent:@"/www"];
success1 = [fileManager1 fileExistsAtPath:writableDBPath1];
if ( success1 )
{
NSString *defaultDBPath1 = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"www"];
NSLog(@"default SUCCESS / AppDelegate path %@",defaultDBPath1);
success1 = [fileManager1 copyItemAtPath:defaultDBPath1 toPath:writableDBPath1 error:&error1];
}
else
{
if (![[NSFileManager defaultManager] fileExistsAtPath:writableDBPath1])
[[NSFileManager defaultManager] createDirectoryAtPath:writableDBPath1 withIntermediateDirectories:NO attributes:nil error:&error1];
}
}
return YES;
}
2)要覆盖默认路径(orig.设置为www文件夹),在CordovaLib/Classes/CDVCommandDelegateImpl.m中,替换函数体:
- (NSString*)pathForResource:(NSString*)resourcepath
有:
- (NSString*)wwwFolderName
{
NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
return [NSString stringWithFormat:@"%@/www",[searchPaths objectAtIndex:0]];
}
- (NSString*) pathForResource:(NSString*)resourcepath
{
NSBundle* mainBundle = [NSBundle mainBundle];
NSMutableArray* directoryParts = [NSMutableArray arrayWithArray:[resourcepath componentsSeparatedByString:@"/"]];
NSString* filename = [directoryParts lastObject];
[directoryParts removeLastObject];
NSString* directoryPartsJoined = [directoryParts componentsJoinedByString:@"/"];
NSString* directoryStr = [self wwwFolderName];
if ([directoryPartsJoined length] > 0)
{
directoryStr = [NSString stringWithFormat:@"%@/%@", [self wwwFolderName], [directoryParts componentsJoinedByString:@"/"]];
}
NSLog(@"default path %@",directoryStr);
if (![[self wwwFolderName] isEqualToString:@"www"])
{
return [NSString stringWithFormat:@"%@/%@",[self wwwFolderName],@"shared/index.html"];
}
return [mainBundle pathForResource:filename ofType:@"" inDirectory:directoryStr];
}
其他参考文献:
| 归档时间: |
|
| 查看次数: |
6758 次 |
| 最近记录: |