Cocoa 关于未在文件内容中进行替换的Xcode项目模板的特定帮助

Cocoa 关于未在文件内容中进行替换的Xcode项目模板的特定帮助,cocoa,xcode,macos,Cocoa,Xcode,Macos,我们正在尝试制作一个项目模板,但有关该模板的文档不完整或不存在 在对一些模板文件进行反向工程时,我们得出了以下结论。然而,它实际上不起作用 首先,我们发现项目模板应该安装在: ~/Library/Application-Support/Developer/Shared/Xcode/Project-Templates 我们已经制作了这个项目并在这里安装了它,这部分工作正常——我们可以在Xcode“新项目”选择器的“用户模板”部分看到这一点 项目文件夹包含以下文件。正如您所看到的,我希望文件名被替换

我们正在尝试制作一个项目模板,但有关该模板的文档不完整或不存在

在对一些模板文件进行反向工程时,我们得出了以下结论。然而,它实际上不起作用

首先,我们发现项目模板应该安装在:

~/Library/Application-Support/Developer/Shared/Xcode/Project-Templates

我们已经制作了这个项目并在这里安装了它,这部分工作正常——我们可以在Xcode“新项目”选择器的“用户模板”部分看到这一点

项目文件夹包含以下文件。正如您所看到的,我希望文件名被替换(该部分有效),但正如您将看到的,我还希望文件的内容被替换;这不会发生

  • ___项目名称\uuuuuuuuuuuuuxcodeproj
  • ___项目名称标识器前缀.pch
  • ___项目名称标识器icns
  • ___PROJECTNAMEASIDENTIFIER\uuuuuuuuu代表.h
  • ___PROJECTNAMEASIDENTIFIER\uuuuuuu Delegate.m
  • ___PROJECTNAMEASIDENTIFIER\uuuuuuu模板.html
  • Debug.xconfig
  • 恩尔普洛伊
  • Info.plist
  • Release.xconfig
我已将两个特殊文件放入了____;PROJECTNAME.xcodeproj包中:

  • TemplateInfo.plist
  • TemplateIcon.icns-在新项目窗口中显示的图标
如果我使用此模板创建一个新项目(称为“Foo&Bar”作为压力测试),它将创建以下文件:

  • Debug.xconfig
  • 恩尔普洛伊
  • Foo&Bar.xcodeproj
  • Foo_uuuuuuuuuuuuuu前缀.pch
  • Foo_______.icns
  • Foo_uuuuuuuBardelegate.h
  • Foo_uuuuuuuuuuBardelegate.m
  • Foo_uuuuubartemplate.html
  • Info.plist
  • Release.xconfig
到目前为止还不错

但是在文件内容中,我得到了这样的东西。以下是Foo_uuuuuuuuuuuuubardelegate.m的内容:

//
//  «PROJECTNAMEASIDENTIFIER»Delegate.m
//  «PROJECTNAME»
//
//  Created by «FULLUSERNAME» on «DATE».
//  Copyright «ORGANIZATIONNAME» «YEAR» . All rights reserved.
//

#import "«PROJECTNAMEASIDENTIFIER»Delegate.h"


@implementation «PROJECTNAMEASIDENTIFIER»Delegate

@end
明显的问题是,不知何故,我把TemplateInfo.plist做错了。但是,请再次注意,不仅我的特殊物品没有被取代,而且标准物品甚至没有被取代!所以这可能是一个更深层次的问题

但是,由于TemplateInfo.plist是我最好的假设,因此我提出了几个我尝试过的变体。两者都不起作用

要么:

{
    FilesToMacroExpand = (
        "\_\_\_PROJECTNAMEASIDENTIFIER\_\_\_\_Prefix.pch",
        "en.lproj/InfoPlist.strings",
        "\_\_\_PROJECTNAMEASIDENTIFIER\_\_\_\_Prefix.pch",
        "\_\_\_PROJECTNAMEASIDENTIFIER\_\_\_.icns",
        "\_\_\_PROJECTNAMEASIDENTIFIER\_\_\_Delegate.h",
        "\_\_\_PROJECTNAMEASIDENTIFIER\_\_\_Delegate.m",
        "\_\_\_PROJECTNAMEASIDENTIFIER\_\_\_Template.html",
        "Info.plist"
    );
    Description = "This project builds a cocoa-based \"element\" plugin for Sandvox.";
}
或:

更新:我还尝试添加了“FilesToRename”键,尽管__;似乎会自动导致重命名。这是plist的内容,以XML格式(因为有些人担心UTF-8的特性——是的,这是一个有效的plist):


描述
该项目为Sandvox构建了一个基于可可粉的“元素”插件。
文件宏扩展
«PROJECTNAMEASIDENTIFIER»_Prefix.pch
en.lproj/InfoPlist.strings
«PROJECTNAMEASIDENTIFIER».icns
«PROJECTNAMEASIDENTIFIER»委托人.h
«PROJECTNAMEASIDENTIFIER»Delegate.m
«PROJECTNAMEASIDENTIFIER»Template.html
Info.plist
文件存储名
___项目名称标识器icns
«PROJECTNAMEASIDENTIFIER».icns
___PROJECTNAMEASIDENTIFIER\uuuuuuuuu代表.h
«PROJECTNAMEASIDENTIFIER»委托人.h
___PROJECTNAMEASIDENTIFIER\uuuuuuu Delegate.m
«PROJECTNAMEASIDENTIFIER»Delegate.m
___PROJECTNAMEASIDENTIFIER\uuuuuuu模板.html
«PROJECTNAMEASIDENTIFIER»Template.html
___项目名称标识器前缀.pch
«PROJECTNAMEASIDENTIFIER»_Prefix.pch
___项目名称\uuuuuuuuuuuuuxcodeproj
«项目名称».xcodeproj
您可能希望使用“文件存储名”部分。以下内容来自基于PyObjC Cocoa文档的应用程序模板。它很好用

    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Description</key>
        <string>This project builds a Cocoa-based application written in Python that uses the NSDocument architecture.</string>
        <key>FilesToMacroExpand</key>
        <array>
                <string>«PROJECTNAME»_Prefix.pch</string>
                <string>Info.plist</string>
                <string>English.lproj/InfoPlist.strings</string>
                <string>English.lproj/MainMenu.xib</string>
                <string>English.lproj/«PROJECTNAMEASIDENTIFIER»Document.xib</string>
                <string>main.py</string>
                <string>«PROJECTNAMEASIDENTIFIER»Document.py</string>
                <string>main.m</string>
        </array>
        <key>FilesToRename</key>
        <dict>
                <key>CocoaAppDocument.py</key>
                <string>«PROJECTNAMEASIDENTIFIER»Document.py</string>
                <key>CocoaDocApp_Prefix.pch</key>
                <string>«PROJECTNAMEASIDENTIFIER»_Prefix.pch</string>
                <key>English.lproj/CocoaAppDocument.xib</key>
                <string>English.lproj/«PROJECTNAMEASIDENTIFIER»Document.xib</string>
        </dict>
</dict>
</plist>

描述
该项目构建了一个基于Cocoa的应用程序,该应用程序是用Python编写的,使用NSDocument体系结构。
文件宏扩展
«项目名称»_Prefix.pch
Info.plist
English.lproj/InfoPlist.strings
English.lproj/main menu.xib
English.lproj/«PROJECTNAMEASIDENTIFIER»Document.xib
main.py
«PROJECTNAMEASIDENTIFIER»Document.py
main.m
文件存储名
CocoaAppDocument.py
«PROJECTNAMEASIDENTIFIER»Document.py
CocoaDocApp_Prefix.pch
«PROJECTNAMEASIDENTIFIER»_Prefix.pch
English.lproj/CocoaAppDocument.xib
English.lproj/«PROJECTNAMEASIDENTIFIER»Document.xib

另一个资源是杰西·格罗让的。它是免费的、开源的,可能会帮你省去以后的麻烦。

有两种模板样式,以模板宏分隔符为特征:旧样式在UTF-8文件中使用MacRoman-guillamots,新样式在整个文件中使用三个下划线。你不能混搭。新样式仅适用于3.1及更高版本,您还必须在要替换的文件名中使用三个下划线。

进一步了解Chris的回答(“有两种样式的模板…”),您可以在其他平台的模板中找到新样式的示例

以下摘录显示了几个使用三重底杆的典型替代变量的示例;如果您在Foo\uuuuuuu BarDelegate.m中使用这些变量来代替基于guillamot的变量,它应该可以工作

//
//  ___PROJECTNAMEASIDENTIFIER___AppDelegate.m
//  ___PROJECTNAME___
//
//  Created by ___FULLUSERNAME___ on ___DATE___.
//  Copyright ___ORGANIZATIONNAME___ ___YEAR___. All rights reserved.
//

#import "___PROJECTNAMEASIDENTIFIER___AppDelegate.h"

@implementation ___PROJECTNAMEASIDENTIFIER___AppDelegate

你为什么错过了那些“我刚才在想同一个问题

对我来说,在plistworks中添加文件时,我用php文件更改了html文件,并对其进行了解析。 但现在它只解析列表中的前几项。 旧的html文件仍然是:«PROJECTNAME» 就像这个程序不计算列表中有多少项


但是代码中的位置在哪里,它在哪里不这样做…?

danwood,请添加您的
    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Description</key>
        <string>This project builds a Cocoa-based application written in Python that uses the NSDocument architecture.</string>
        <key>FilesToMacroExpand</key>
        <array>
                <string>«PROJECTNAME»_Prefix.pch</string>
                <string>Info.plist</string>
                <string>English.lproj/InfoPlist.strings</string>
                <string>English.lproj/MainMenu.xib</string>
                <string>English.lproj/«PROJECTNAMEASIDENTIFIER»Document.xib</string>
                <string>main.py</string>
                <string>«PROJECTNAMEASIDENTIFIER»Document.py</string>
                <string>main.m</string>
        </array>
        <key>FilesToRename</key>
        <dict>
                <key>CocoaAppDocument.py</key>
                <string>«PROJECTNAMEASIDENTIFIER»Document.py</string>
                <key>CocoaDocApp_Prefix.pch</key>
                <string>«PROJECTNAMEASIDENTIFIER»_Prefix.pch</string>
                <key>English.lproj/CocoaAppDocument.xib</key>
                <string>English.lproj/«PROJECTNAMEASIDENTIFIER»Document.xib</string>
        </dict>
</dict>
</plist>
//
//  ___PROJECTNAMEASIDENTIFIER___AppDelegate.m
//  ___PROJECTNAME___
//
//  Created by ___FULLUSERNAME___ on ___DATE___.
//  Copyright ___ORGANIZATIONNAME___ ___YEAR___. All rights reserved.
//

#import "___PROJECTNAMEASIDENTIFIER___AppDelegate.h"

@implementation ___PROJECTNAMEASIDENTIFIER___AppDelegate