В Info.plist
пропущенные / неверные ключи / строки могут повлиять на первые две проблемы; если ключи дублированы, отсутствуют или установлены неправильно, это, безусловно, может вызвать проблемы с функциональностью.
Отсутствует
NSPrincipalClass
CFBundleInfoDictionaryVersion
CFBundleSupportedPlatforms
[1162] [ 1163] CFBundlePackageType
CFBundleExecutable
(это двоичный файл внутри папки MacOS) CFBundleLocalizations
(необязательно) DTXcode
(необязательно) DTPlatform
(опционально) DTSDK
(опционально) DTCompiler
(опционально) ] Неверно
CFBundleIdentifier
(должно быть в обратном формате DNS) CFBundleVersion
(дубликат / неверно) CFBundleSignature
(неверно ) ПРИМЕЧАНИЯ : имя приложения MyApp.app
не обязательно должно совпадать с исполняемым файлом в папке MacOS
, если Вы добавили и установили ключ CFBundleExecutable
. Значок приложения может быть любым именем, которое вы хотите, ключ к его работе - включение дополнительных CoreFoundation
клавиш, показанных выше, установленных правильно.
После того, как вы отсортировали все недостающие / неправильные ключи, вы должны получить что-то похожее на:
CFBundleDevelopmentRegion
en
CFBundleExecutable
MyApp
CFBundleIconFile
MyIcon
CFBundleIdentifier
com.company.MyApp
CFBundleInfoDictionaryVersion
6.0
CFBundleName
MyApp
CFBundlePackageType
APPL
CFBundleShortVersionString
1.0
CFBundleSupportedPlatforms
MacOSX
CFBundleVersion
1
DTCompiler
com.apple.compilers.llvm.clang.1_0
DTPlatformBuild
10B61
DTPlatformVersion
GM
DTSDKBuild
18B71
DTSDKName
macosx10.14
DTXcode
1010
DTXcodeBuild
10B61
LSMinimumSystemVersion
10.13
NSHumanReadableCopyright
Copyright © 2019 MyApp. All rights reserved.
NSMainNibFile
MainMenu
NSPrincipalClass
NSApplication
* Выше Info.plist
должен работать с вашим приложением, так как значения соответствуют тому, что вы показали в своем вопросе.
Относительно i18n
тестирования - Internationalization and Localization Guide
секции Testing Your Internationalized App
и Managing Strings Files Yourself
должны быть полезными. В Руководстве содержится огромное количество информации; Один подход подходит для всех подходов к тестированию, как правило, не подходит, поэтому вы захотите найти то, что лучше всего подходит для вас.
→ Справочник по ключам списка свойств информации
blockquote>
→ Об интернационализации и локализации
Можно или обнародовать переменную или превратить ее в свойство. Например, чтобы обнародовать его:
@interface Class1
{
@public
int var;
}
// methods...
@end
// Inside a Class2 method:
Class1 *obj = ...;
obj->var = 3;
Сделать это свойством:
@interface Class1
{
int var; // @protected by default
}
@property (readwrite, nonatomic) int var;
// methods...
@end
@implementation Class1
@synthesize var;
...
@end
// Inside a Class2 method:
Class1 *obj = ...;
obj.var = 3; // implicitly calls [obj setVar:3]
int x = obj.var; // implicitly calls x = [obj var];
Вы могли выставить переменную в class2 как свойство. Если class1 имеет ссылку на class2, class1 может затем видеть переменную. Честно, тем не менее, это кажется, что Вы - новичок и к Objective C и к объектно-ориентированному программированию. Я рекомендую читать больше на обоих.
Вот место для запуска для объектно-ориентированного программирования с Objective C.