2015-07-14 3 views
6

Cocoa Touch Framework обеспечивают поддержку для управления версиями, которая находится в Настройки сборки под заголовком Версия для печати.Получить версию версии проекта Cocoa Touch Framework в Swift

Чтобы получить доступ к этому значению во время выполнения, мы можем использовать переменные FrameworkVersionNumber и FrameworkVersionString[], которые автоматически генерируются для нас как часть процесса сборки.

При работе с Swift проекта, они могут быть найдены автоматически генерируется в верхней части заголовка совместимости с Objective-C:

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

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

Однако, в то время как FrameworkVersionNumber доступна из Swift, FrameworkVersionString[] нет. На самом деле, глядя на содержание рамочного модуля, я могу видеть, что только первая переменная подвергается Swift:

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

Проблема с этим состоит в том, что, поскольку FrameworkVersionNumber является Double любые номера версий, как 3.2.1 просто измените на 3.200000 ...

Кто-нибудь знает, является ли это недостатком в моей настройке проекта, ошибкой в ​​Xcode или существует ли способ получить версию фреймворка в Swift как String или массив, поэтому что я могу обеспечить более гранулированное управление версиями, чем major.minor?

+0

Смотрите это: http://stackoverflow.com/questions/24538215/get-version-number-of-ios-universal-framework-in-client – AliasCocoa

ответ

4

я действительно нашел потенциальное решение этой проблемы, это не так чисто, но он делает работу:

По умолчанию, когда Xcode создает основу он устанавливает версии к 1.0 и Построить к $(CURRENT_PROJECT_VERSION), что отлично, потому что это значение фактически копируется из Текущая версия проекта в настройках сборки> Версии.

Так что вы можете сделать, чтобы получить это значение во время выполнения выглядит следующим образом:

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 

Это делает работу, но он чувствует себя обходной за то, что используется для (я считаю) быть легко доступны из переменных в Objective-C.

0

Objective-C код:

NSString *version = [NSBundle bundleWithIdentifier:[[NSBundle mainBundle] bundleIdentifier]].infoDictionary[@"CFBundleShortVersionString"]; 
Смежные вопросы