Вставьте перенастройку сборки в ваше приложение / web.config;
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" PublicKeyToken="30ad4fe6b2a6aeed" />
<bindingRedirect oldVersion="1.0.0.0-4.5.11.0" newVersion="4.5.11.0" />
</dependentAssembly>
Обратите внимание, что номера версий должны соответствовать установленной вами версии.
Вы можете добавить ключ «TargetName» в свой файл Info.plist:
Затем вы можете получить к нему доступ (быстрый код):
var plistFileName = NSBundle.mainBundle().infoDictionary?["TargetName"] as String
** Для Swift 4 **
Я не уверен, насколько хорошо иметь файл констант в Swift, но вы можете создать что-то подобное:
enum TargetType:String, CaseIterable{
case target1 = "My Target 1"
case target 2 = "My Target 2"
case unknown
}
var currentTarget:TargetType = {
return TargetType(rawValue: (Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as? String ?? "")) ?? .unknown
}()
Так что вы может вызвать его в любое время, как это
if currentTarget != .unknown{
print(currentTarget.rawValue)
}
Если вы хотите добавить переменную внутри класса Константы, то:
class Constants: NSObject {
static var currentTarget:TargetType = {
return TargetType(rawValue: (Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as? String ?? "")) ?? .unknown
}()
}
Swift 4, Xcode 9+
Имя пакета:
Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as? String ?? ""
Отображаемое имя пакета:
Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as? String ?? ""
Swift 3, Xcode 8+
let targetName = Bundle.main.infoDictionary?["CFBundleName"] as? String ?? ""
NSLog(@"Target name: %@",[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"]);
Надеюсь помочь вам!
Отредактировано: «CFBundleName» благодарит Макса и Даниэля Бо за вашу благодарность
В Xcode 7.3.1
if let targetName = NSBundle.mainBundle().infoDictionary?["CFBundleName"] as? String{
print(targetName)
}
Я должен отметить первоначальный ответ vk.edward.li , так как этот ответ лишь расширяет его.
Все макросы настроек сборки можно легко использовать в исходном коде в качестве макросов препроцессора. Проблема в том, что они не установлены заранее; Вы должны сами указать, к каким из них вы получаете доступ.
Я уже добавил три дополнительных макроса препроцессора. Просто нажмите +
и добавьте следующее: TARGET_NAME=\""$TARGET_NAME"\"
, и вы предоставили себе доступ к еще одному макросу настроек сборки.
Project settings ––> Build Settings ––> Apple Clang - Preprocessing[Preprocessor Macros]
. Обратите внимание, что если вы попытаетесь вставить их для обоих режимов компиляции, макрос DEBUG=1
будет удален, но его можно будет легко добавить сразу после этого.
Также стоит отметить, что значения макросов должны быть установлены по-разному для разных языков: Objective-C
и C++
/ Swift
и т. Д. Это связано с префиксом NSString
, используемым в Objective-C
, поэтому для этот язык, он должен быть MACRO=@\""$MACRO"\"
вместо MACRO=\""$MACRO"\"
.