使用 GNUstep Makefile 构建 Xcode 项目无法打开应用程序 Window,buildtool 找不到 English.lproj

Building Xcode Project Using GNUstep Makefile Does Not Open Application Window, buildtool Can't Find English.lproj

我在 Mac OS X Tiger 10.4.11 上使用 Xcode 2.5 完成了 CurrencyConverter example,我将其称为 CurrencyConverter2,因为这是我的第二次尝试。因为我读到 GNUstep 与 Mac OS X Tiger 版本的 Cocoa 兼容,所以我想尝试在 GNUstep 中构建这个 Xcode 项目,我很感兴趣在学习中。

我能够在 VM 上安装 GNUstep 运行 FreeBSD 12.0。我创建了一个名为 GNUmakefile 的 Makefile。以下是 GNUmakefile 的内容:

include $(GNUSTEP_MAKEFILES)/common.make

APP_NAME = CurrencyConverter2
CurrencyConverter2_OBJC_FILES = main.m ConverterController.m Converter.m
CurrencyConverter2_RESOURCE_FILES = Info.plist English.lproj/MainMenu.nib

include $(GNUSTEP_MAKEFILES)/application.make

使用 gmake 构建程序时,似乎一切都已正确构建:

This is gnustep-make 2.7.0. Type 'gmake print-gnustep-make-help' for help.
Running in gnustep-make version 2 strict mode.
Making all for app CurrencyConverter2...
Creating CurrencyConverter2.app/....
gmake[3]: Warning: File 'main.m' has modification time 21869 s in the future
 Compiling file main.m ...
 Compiling file ConverterController.m ...
 Compiling file Converter.m ...
 Linking app CurrencyConverter2 ...
gmake[3]: warning:  Clock skew detected.  Your build may be incomplete.
 Creating CurrencyConverter2.app/Resources...
 Creating stamp file...
 Creating CurrencyConverter2.app/Resources/Info-gnustep.plist...
 Creating CurrencyConverter2.app/Resources/CurrencyConverter2.desktop...
 Copying resources into the app wrapper...

但是,当我尝试打开 CurrencyConverter2.app 时,主 window 根本没有出现。

我的直觉是,出于某种原因,我的 Makefile 无法识别英语。lproj/MainMenu.nib.

我还尝试使用一个名为 buildtool 的工具,它能够使用 GNUstep 构建 Xcode 项目,但它抱怨找不到 English.lproj,即使它在我的目录中运行 构建工具。

将 Mac 应用程序转换为 GNUstep 时,您需要制作一个 GNUstep-specific Info-plist 大致反映 Info.plist 的模板(即 Mac-only) .

在构建时,Info-plist 模板用于生成两个文件:Info-gnustep.plist 和应用程序的 .desktop (freedesktop.org desktop entry) 文件。

Info-gnustep.plist 包含在 loadtime/runtime 处使用的信息条目,例如主体名称 class、要加载的 main-menu nib 文件等

应用程序的 .desktop 文件包含用于向 desktop-environment/file-browser 注册应用程序的信息条目,例如应用程序的 desktop-menu 类别、可执行路径、支持的 MIME 类型等。(注意: 'make install' 目前没有在桌面环境中注册 GNUstep 应用程序;为了让已安装的 GNUStep 应用程序出现在桌面菜单中,其 .desktop 文件(位于其 Resources 文件夹中)必须使用 'desktop-file-install' command-line tool.)

Info-plist 模板应命名为“{APP_NAME}Info.plist”,并且可以包含标准 XML-format plist,或简单的 text-list格式:

{
   {KEY1} = {VALUE1};
   {KEY2} = {VALUE2};
   ...
}

对于 CurrencyConverter2,在与 Makefile 相同的目录中创建一个名为 "CurrencyConverter2Info.plist" 的文本文件,其内容为:

{
    ApplicationName = CurrencyConverter2;
    FreeDesktopCategories = ("Utility", "X-GNUstep");
    NSExecutable = "CurrencyConverter2";
    NSMainNibFile = "MainMenu.nib";
    NSPrincipalClass = NSApplication;
    NSRole = Application;
}

GNUstep-make 会自动找到 CurrencyConverter2Info.plist,因此它不需要在 Makefile 中输入。


与 Info-plist 模板问题无关,您还可以对 Makefile 进行以下更改:

  • Info.plist是Mac-only,所以可以从 CurrencyConverter2_RESOURCE_FILES
  • MainMenu.nib 可以通过从 CurrencyConverter2_RESOURCE_FILES 中删除并添加这两个来指定为本地化资源(因此它的路径名中不再需要 English.lproj)您的 Makefile 行:

    CurrencyConverter2_LOCALIZED_RESOURCE_FILES = MainMenu.nib CurrencyConverter2_LANGUAGES = 英语