2015-07-14 7 views
6

Cocoa Touch Framework fornisce supporto per il controllo delle versioni, disponibile in Impostazioni di creazione nella sezione Versioning.Ottieni la stringa di versione del progetto Cocoa Touch Framework in Swift

Per accedere a questo valore in fase di esecuzione, è possibile utilizzare le variabili FrameworkVersionNumber e FrameworkVersionString[] che vengono generate automaticamente come parte del processo di generazione.

Quando si lavora con un progetto Swift, questi possono essere trovati automaticamente generato nella parte superiore della testata compatibilità Objective-C:

//! Project version number for Framework. 
FOUNDATION_EXPORT double FrameworkVersionNumber; 

//! Project version string for Framework. 
FOUNDATION_EXPORT const unsigned char FrameworkVersionString[]; 

Tuttavia, mentre FrameworkVersionNumber è accessibile da Swift, FrameworkVersionString[] non è. In effetti guardando il contenuto del modulo quadro, posso vedere che solo la prima variabile è esposto a Swift:

//! Project version number for Framework. 
var FrameworkVersionNumber: Double 

Il problema di questo è che, poiché FrameworkVersionNumber è un Double, eventuali numeri di versione come 3.2.1 semplicemente passare a 3.200000 ...

Qualcuno sa se questo è un difetto nella configurazione del mio progetto, un bug in Xcode, o se c'è un modo di ottenere la versione del framework in Swift come String o array, quindi che posso fornire versioni di versione più granulose di major.minor?

+0

Vedere questo: http://stackoverflow.com/questions/24538215/get-version-number-of-ios-universal-framework-in-client – AliasCocoa

risposta

4

ho effettivamente trovato un potenziale soluzione per questo problema, ma non è così pulito ma funziona:

Per impostazione predefinita, quando Xcode crea un quadro imposta il versione-1.0 e la Costruire a $(CURRENT_PROJECT_VERSION) che è eccezionale, poiché questo valore viene effettivamente copiato dal campo Versione progetto corrente in Impostazioni di creazione> Controllo versioni.

Che cosa si può fare per ottenere questo valore in fase di esecuzione è la seguente:

let bundle = NSBundle(identifier: "com.yourframework.Framework")! // Get a reference to the bundle from your framework (not the bundle of the app itself!) 
let build = bundle.infoDictionary![kCFBundleVersionKey] as! String // Get the build from the framework's bundle as a String 

Questo funziona ma ci si sente abbastanza tortuoso per qualcosa che in passato (credo) essere facilmente accessibile da una variabile in Objective-C.

0

codice Objective-C:

NSString *version = [NSBundle bundleWithIdentifier:[[NSBundle mainBundle] bundleIdentifier]].infoDictionary[@"CFBundleShortVersionString"]; 
Problemi correlati