Phonegap - Обновление JavaScript и CSS без отправки приложения в appStore - программирование
Подтвердить что ты не робот

Phonegap - Обновление JavaScript и CSS без отправки приложения в appStore

Возможно ли обновить содержимое папки WWW в телефонной запиксе без отправки приложения каждый раз, когда вы вносите изменения в appStore? Есть ли юридические проблемы?

4b9b3361

Ответ 1

Короткий ответ - да, вы можете - но вам нужно переместить www, прежде чем вы сможете написать ему.

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

Итак, когда вы упаковываете приложение, пакет приложений содержит ваш каталог www и все различные и различные части вашего собственного веб-приложения PG. Все, что входит в комплект приложения, является статическим, поэтому его нельзя записать. Однако вы можете написать NSDocumentDirectory для своего приложения - это отдельная изолированная область хранения.

Первым шагом является (при запуске) копирование вашей папки www в NSDocumentDirectory.

Во-вторых, вам нужно переопределить метод pathForResource CDVCommandDelegateImpl, чтобы указать PG в новом местоположении www.

В этот момент ваше приложение должно работать так же, как и в комплекте приложения. Одним из примечательных исключений является то, что каждый из файлов теперь может быть изменен.

Мое приложение является базовым продуктом, который может иметь добавочный контент. Если бы я включил весь дополнительный контент, размер приложения был бы несколько сотен МБ. Таким образом, я включаю базовое приложение с одним (примерным) пакетом данных, и поскольку пользователям необходимо расширить продукт, они выбирают дополнительные пакеты данных, которые загружаются, извлекаются и копируются в соответствующий подкаталог www-папки, как он существует в NSDocumentDirectory.

В качестве бонуса, если я нахожу ошибку в HTML - или хочу добавить функцию, я могу сделать это без повторной отправки приложения. Единственная причина, по которой мне нужно повторно отправить приложение, - это исправление Objective-C.

Ответ 2

Это просто добавление к Майклу ответа.

1  ) Скопируйте свою www-папку в NSDocumentDirectory:  - для iOS phonegap добавьте это в /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 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 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  ) Чтобы переопределить путь по умолчанию (исходный набор к папке www), в CordovaLib/Classes/CDVCommandDelegateImpl.m замените тело функции:

- (NSString *) pathForResource: (NSString *) путь к ресурсам


с помощью:

- (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];
}


Другие ссылки:

Ответ 3

Хорошо, поскольку Phonegap использует WebView, вы можете хранить части своего кода в localstorage и eval, и каждый раз, когда у пользователя есть доступ в Интернет, вы можете загружать обновленные части кода с вашего сервера и размещать их в localstorage снова.

Что касается файлов, вы не можете их заменить, поскольку они упакованы.

Хотя это требует от вас разработки умной логики "обновления", так как это плохая идея, чтобы ваши пользователи не были проинформированы об обновлениях и новых функциях/исправлениях.

Удачи!

Ответ 4

Нет, папка www упакована в ваше приложение, поэтому, если вы хотите обновить эти файлы, вам придется повторно отправить их в магазин приложений. Другие платформы, такие как Android и BB, позволят вам размещать ваше приложение удаленно, но если вы хотите находиться в магазине приложений iOS, эти файлы должны быть локальными.