[XCode] How to create a Xcode project template

本文详细介绍如何为iPhone开发创建自定义Xcode项目模板。包括设置模板目录、复制并修改现有模板、设置文件属性等步骤。

 

Xcode project templates

From IPhone Dev FAQ

To make your own Xcode Project Template for iPhone development follow these steps:
  1. Open a new finder window and navigate to ~/Library/Application Support/Developer/Shared/Xcode/ (note the ~)
  2. Create a new directory in here called Project Templates/
  3. Go into the newly created Project Templates/ directory and create a directory for the group your templates will appear in within the new project dialog in Xcode. In this example we will use MyApplication.
  4. Open a new finder window and navigate to /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Project Templates/Application
  5. Copy one of the project templates (the one that best meets your needs) from here to the MyApplication directory we just created.
  6. Rename the copied project template directory to the name you want your template to be called.
  7. Go into this directory and you'll find an Xcode project called ___PROJECTNAME___.xcodeproj - Open this project like any normal project and edit it to how you want your newly created projects made from this template to be. You can use ___PROJECTNAME___ in files and directory names and in code and it will be replaced with the project name. ___PROJECTNAMEASIDENTIFIER___ can be used for code where you don't want spaces or other characters.
  8. After setting up your project template how you like, make sure it builds and then go and delete the build directory from the template directory because you don't want it to create that in new projects. Inside the ___PROJECTNAME___.xcodeproj directory you should also delete the username.* files (where username is your username), these contain things like window state and open files information from the last time you edited the project. If you ever edit your template later on, you'll need to delete these files again.
  9. Finally, change the description of your template in the ___PROJECTNAME___.xcodeproj/TemplateInfo.plist file and optionally change the icons file ___PROJECTNAME___.xcodeproj/TemplateIcon.icns. Search the web for how to edit .icns files, that's not covered here.

You can even add your project template to SVN and Xcode won't copy the .svn directories when it creates a new project. This can make it easy to merge useful changes from projects back into your template.

reference from http://www.iphonedevfaq.com/index.php?title=Xcode_Project_Template

I try to create my project template for my game develop toolkit CloudBox.

This is a very interesting experience.

In my experience,if file name set to ___PROJECTNAMEASIDENTIFIER___ , we must set file property is Relative to Project.

If file is our toolkit, we must set file property is Relative to Enclosing Group.

pod install报错:Analyzing dependencies Inspecting targets to integrate CDN: trunk Relative path: CocoaPods-version.yml exists! Returning local because checking is only performed in repo update ――― MARKDOWN TEMPLATE ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― ### Command ``` /Users/huang/.rbenv/versions/3.3.0/bin/pod install --verbose ``` ### Report * What did you do? * What did you expect to happen? * What happened instead? ### Stack ``` CocoaPods : 1.15.2 Ruby : ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-darwin23] RubyGems : 3.5.3 Host : macOS 15.0.1 (24A348) Xcode : 16.0 (16A242d) Git : git version 2.39.5 (Apple Git-154) Ruby lib dir : /Users/huang/.rbenv/versions/3.3.0/lib Repositories : trunk - CDN - https://cdn.cocoapods.org/ ``` ### Plugins ``` cocoapods-deintegrate : 1.0.5 cocoapods-plugins : 1.0.0 cocoapods-search : 1.0.1 cocoapods-trunk : 1.6.0 cocoapods-try : 1.2.0 ``` ### Podfile ```ruby # Uncomment this line to define a global platform for your project # platform :ios, '14.0' target 'HXGPSLibrary' do use_frameworks! # 添加GZIP pod 'GZIP', '~> 1.3.0' target 'HXGPSLibraryTests' do inherit! :search_paths end end ``` ### Error ``` RuntimeError - `PBXGroup` attempted to initialize an object with unknown ISA `PBXFileSystemSynchronizedRootGroup` from attributes: `{"isa"=>"PBXFileSystemSynchronizedRootGroup", "exceptions"=>["63B920102E862DCC00404248"], "path"=>"HXGPSLibrary", "sourceTree"=>"<group>"}` If this ISA was generated by Xcode please file an issue: https://github.com/CocoaPods/Xcodeproj/issues/new /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:359:in `rescue in object_with_uuid' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:349:in `object_with_uuid' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:300:in `block (2 levels) in configure_with_plist' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:299:in `each' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:299:in `block in configure_with_plist' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:296:in `each' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:296:in `configure_with_plist' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project.rb:272:in `new_from_plist' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:350:in `object_with_uuid' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:290:in `block in configure_with_plist' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:287:in `each' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project/object.rb:287:in `configure_with_plist' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project.rb:272:in `new_from_plist' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project.rb:213:in `initialize_from_file' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/xcodeproj-1.25.0/lib/xcodeproj/project.rb:113:in `open' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/installer/analyzer.rb:1194:in `block (2 levels) in inspect_targets_to_integrate' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/installer/analyzer.rb:1193:in `each' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/installer/analyzer.rb:1193:in `block in inspect_targets_to_integrate' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/user_interface.rb:64:in `section' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/installer/analyzer.rb:1188:in `inspect_targets_to_integrate' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/installer/analyzer.rb:107:in `analyze' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/installer.rb:422:in `analyze' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/installer.rb:244:in `block in resolve_dependencies' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/user_interface.rb:64:in `section' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/installer.rb:243:in `resolve_dependencies' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/installer.rb:162:in `install!' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/command/install.rb:52:in `run' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/claide-1.1.0/lib/claide/command.rb:334:in `run' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/lib/cocoapods/command.rb:52:in `run' /Users/huang/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/cocoapods-1.15.2/bin/pod:55:in `<top (required)>' /Users/huang/.rbenv/versions/3.3.0/bin/pod:25:in `load' /Users/huang/.rbenv/versions/3.3.0/bin/pod:25:in `<main>' ``` ――― TEMPLATE END ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― [!] Oh no, an error occurred. Search for existing GitHub issues similar to yours: https://github.com/CocoaPods/CocoaPods/search?q=%60PBXGroup%60+attempted+to+initialize+an+object+with+unknown+ISA+%60PBXFileSystemSynchronizedRootGroup%60+from+attributes%3A+%60%7B%22isa%22%3D%3E%22PBXFileSystemSynchronizedRootGroup%22%2C+%22exceptions%22%3D%3E%5B%2263B920102E862DCC00404248%22%5D%2C+%22path%22%3D%3E%22HXGPSLibrary%22%2C+%22sourceTree%22%3D%3E%22%3Cgroup%3E%22%7D%60%0AIf+this+ISA+was+generated+by+Xcode+please+file+an+issue%3A+https%3A%2F%2Fgithub.com%2FCocoaPods%2FXcodeproj%2Fissues%2Fnew&type=Issues If none exists, create a ticket, with the template displayed above, on: https://github.com/CocoaPods/CocoaPods/issues/new Be sure to first read the contributing guide for details on how to properly submit a ticket: https://github.com/CocoaPods/CocoaPods/blob/master/CONTRIBUTING.md Don't forget to anonymize any private data! Looking for related issues on cocoapods/cocoapods... Searching for inspections failed: undefined method `map' for nil
09-27
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值