Мы пытаемся сделать шаблон проекта, но документация по этому поводу неполная или отсутствует.
Выполняя обратный инжиниринг некоторых файлов шаблонов, мы пришли к следующему. Однако на самом деле это не работает!
Во-первых, мы разобрались, что внутри должны быть установлены шаблоны проектов:
~/Библиотека/Поддержка приложений/Разработчик/Общие/Xcode/Шаблоны проектов
Мы создали проект и установили его здесь, и эта часть работает — мы видим, что это отображается в разделе «Пользовательские шаблоны» в меню выбора Xcode «Новый проект».
Папка проекта содержит следующие файлы. Как видите, я хочу, чтобы имена файлов были заменены (эта часть работает), но, как вы увидите, я также хочу, чтобы содержимое файлов было заменено; этого не происходит.
- ___PROJECTNAME___.xcodeproj
- ___PROJECTNAMEASIDENTIFIER____Prefix.pch
- ___PROJECTNAMEASIDENTIFIER___.icns
- ___PROJECTNAMEASIDENTIFIER___Delegate.h
- ___PROJECTNAMEASIDENTIFIER___Delegate.m
- ___PROJECTNAMEASIDENTIFIER___Template.html
- Debug.xcconfig
- en.lproj
- Информация.plist
- Release.xcconfig
Я поместил в пакет ___PROJECTNAME___.xcodeproj два специальных файла:
- TemplateInfo.plist
- TemplateIcon.icns — значок, отображаемый в окне «Новый проект».
Если я создам новый проект (названный «Foo & Bar» в качестве стресс-теста) с использованием этого шаблона, он создаст следующие файлы:
- Debug.xcconfig
- en.lproj
- Фу и Бар.xcodeproj
- Foo___Bar_Prefix.pch
- Foo___Bar.icns
- Foo___BarDelegate.h
- Foo___BarDelegate.m
- Foo___BarTemplate.html
- Информация.plist
- Release.xcconfig
Все идет нормально!
Но глядя на содержимое файла, я получаю такие вещи. Вот содержимое Foo___BarDelegate.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.";
}
or:
{
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):
<?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 "element" plugin for Sandvox.</string>
<key>FilesToMacroExpand</key>
<array>
<string>«PROJECTNAMEASIDENTIFIER»_Prefix.pch</string>
<string>en.lproj/InfoPlist.strings</string>
<string>«PROJECTNAMEASIDENTIFIER».icns</string>
<string>«PROJECTNAMEASIDENTIFIER»Delegate.h</string>
<string>«PROJECTNAMEASIDENTIFIER»Delegate.m</string>
<string>«PROJECTNAMEASIDENTIFIER»Template.html</string>
<string>Info.plist</string>
</array>
<key>FilesToRename</key>
<dict>
<key>___PROJECTNAMEASIDENTIFIER___.icns</key>
<string>«PROJECTNAMEASIDENTIFIER».icns</string>
<key>___PROJECTNAMEASIDENTIFIER___Delegate.h</key>
<string>«PROJECTNAMEASIDENTIFIER»Delegate.h</string>
<key>___PROJECTNAMEASIDENTIFIER___Delegate.m</key>
<string>«PROJECTNAMEASIDENTIFIER»Delegate.m</string>
<key>___PROJECTNAMEASIDENTIFIER___Template.html</key>
<string>«PROJECTNAMEASIDENTIFIER»Template.html</string>
<key>___PROJECTNAMEASIDENTIFIER____Prefix.pch</key>
<string>«PROJECTNAMEASIDENTIFIER»_Prefix.pch</string>
<key>___PROJECTNAME___.xcodeproj</key>
<string>«PROJECTNAME».xcodeproj</string>
</dict>
</dict>
</plist>