2012-07-18 7 views
14

Podczas konfigurowania projekt PhoneGap, można zobaczyć następujące:Jak uzyskać wersję aplikacji i wbudować aplikację aplikacji PhoneGap na system iOS?

BUILD

Jak mogę uzyskać te informacje wewnątrz aplikacji iOS? Czy można to zrobić za pomocą phonegapa? A co z wtyczką? Jeśli nie ma wtyczki i istnieje sposób, aby to zrobić w aplikacji na iOS, można zapisać wtyczkę. Po prostu nie znalazłem odpowiedzi.

Dzięki!

+0

Jakie rozwiązanie wdrożyłeś? Czy musisz stworzyć własną wtyczkę PhoneGap? Mam taki sam problem jak ty. –

+0

@FarhanAhmad Wiem, że minęło kilka miesięcy, ale wysłałem bardziej szczegółową odpowiedź z moim rozwiązaniem. – CWSpear

Odpowiedz

22

Chciałem zaoferować moje rozwiązanie (oparte na rozwiązaniu Adama Ware'a).

Zazwyczaj nie podoba mi się podawanie całego kodu dla ludzi do kopiowania i wklejania, ale mam wrażenie, że jest to wyjątek, ponieważ wiele osób nurkujących w PhoneGap nie ma pojęcia o Objective-C i jego zabawnym wyglądająca na składnię (jak ja).

Więc oto co przeszedłem używając kodu i zgodnie z instrukcjami Adam wskazał na:

W moim folderze wtyczek projektu w <project name>/Plugins/, stworzyłem MyCDVPlugin.m i MyCDVPlugin.h.

Napisałem wcześniej w C, więc rozumiem nagłówki, ale dla tych, którzy tego nie robią, w zasadzie mówię komplementowi, czego szukać, więc po prostu mówimy o nazwie naszej metody i importujemy Cordova nagłówek:

#import <Cordova/CDVPlugin.h> 

@interface MyCDVPlugin : CDVPlugin 

- (void)getVersionNumber:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options; 

@end 

Te parametry to standardowe parametry wtyczki Cordova (o ile wiem). Nasza funkcja, jako getter, w rzeczywistości nie ma żadnych parametrów, ale są one nadal wymagane. (options rzeczywistości może być opcjonalnie nie przetestować?).

w naszym .m, wszystko czego potrzebujemy jest rzeczywista funkcja, nasz Główka przed i CDVPluginResult.h:

#import "MyCDVPlugin.h" 
#import <Cordova/CDVPluginResult.h> 

@implementation MyCDVPlugin 

- (void)getVersionNumber:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options { 
    NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 
    NSString* callbackId = [arguments objectAtIndex:0]; 

    CDVPluginResult* pluginResult = nil; 
    NSString* javaScript = nil; 

    pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:version]; 
    javaScript = [pluginResult toSuccessCallbackString:callbackId]; 

    [self writeJavascript:javaScript]; 
} 

@end 

Zasadniczo, ten dostaje numer wersji i przekazuje go do twojego oddzwaniania powodzenia. (Nie sądziłem, że ta metoda rzeczywiście ma awarię, więc nie ma zwrotnego połączenia zwrotnego.)

Dla kompletności, Xcode nie aktualizuje automatycznie plików (co ma sens), ale Zawsze zapominam. To, że pliki znajdują się w katalogu projektu, nie oznacza, że ​​są one w twoim projekcie. Nie zapomnij, aby przeciągnąć je do katalogu wtyczek w projekcie:

Dragging files into the project.

Ponadto, upewnij się dodać wtyczkę do swojej Cordova.plistPlugins wpis:

Editing Cordova.plist

Stamtąd można łatwo wywołać tę metodę z JavaScript (pamiętaj, aby użyć jej po wywołaniu deviceready):

// get and show the version number 
var gotVersionNumber = function(version) { 
    // cache value so we can use it later if we need it 
    Hub.Global.Version = version; 
    $('.version-number').text(version); 
}; 

// my plugin doesn't even have a failure callback, so we pass null. 
// 5th param (parameters to pass into our Obj-C method) is NOT 
// optional. must be at least empty array 
cordova.exec(gotVersionNumber, null, "MyCDVPlugin", "getVersionNumber", []); 

To wszystko! Proste, prawda ...? Mam nadzieję, że to pomaga komuś innemu trochę przytłoczony przez stronę Obj-C PhoneGap.

+0

To jest dokładnie to, czego szukałem (w tym czasie). W końcu wprowadziłem to w inny sposób, więc nie mogę naprawdę sprawdzić, czy to działa. Jestem pewien, że tak! Ale dzięki za udostępnienie. To może pomóc komuś innemu mając ten problem :) –

+0

@rjmunro Dzięki! Użyłem tego fragmentu również w naszej wersji Androida =). Dobre myślenie na tym plugmanie. – CWSpear

+3

Po znalezieniu odpowiedzi zapakowałem ją do wtyczki kompatybilnej z Plugmanem i dodałem na tej podstawie obsługę Androida. Projekt jest tutaj: github.com/whiteoctober/cordova-plugin-app-version (edytowany adres URL) – rjmunro

2

Jako mały dopracowujemy @ niesamowitej odpowiedzi CWSpear za, ja też chciał chwycić produkcji:

Grab Build i jego wersja:

NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; 
NSString* build = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 

wyrzucić je do Dict:

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 
[dict setObject:[NSString stringWithString:version] forKey:@"version"]; 
[dict setObject:[NSString stringWithString:build] forKey:@"build"]; 

Zmodyfikuj pluginResult, aby przywrócić nowy Dict:

pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dict]; 

Cordova.exec:

cordova.exec(function(response){ 
     console.log(response.build); 
     console.log(response.version); 
    }, null, "MyCDVPlugin", "getVersionNumber", []); 

nie wiem wystarczająco dużo o celu C, aby powrócić go jako dwóch argumentach w funkcji cordova.exec zwrotnego JS, poza tym, że będzie prawdopodobnie najbardziej proste.

Steve

0

Jeśli używasz jQuery możemy uzyskać wersję aplikacji z tej funkcji cordova.getAppVersion.getVersionNumber z Cordova-plugin-app-Wersja wtyczki Cordova.

cordova.getAppVersion.getVersionNumber().then(function (version) { 
    $('.version').text(version); 
}); 

Ale jeśli używamy kątowa to musimy umieścić kod ustawień wersja wewnątrz $ Timeout to będzie działać dobrze.

angular.module('testApp', []) 
.controller('MainCtrl', function($scope, $rootScope, $timeout) { 
// Calling cordova plugin cordova-plugin-app-version 
    cordova.getAppVersion.getVersionNumber().then(function (version) { 
    $timeout(function() { 
      $rootScope.app = {}; 
      $rootScope.app.version = version; 
    }, 0); 
}); 
Powiązane problemy