Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating groups using a custom template xcode 8

I have successfully created an Xcode 8 template that will respond to these actions:

  1. You already have a working project
  2. You want to add your custom swift file to this project

Step by step, how to achieve that:

I have created under:

/Users/*YOUR_USER_NAME*/Library/Developer/Xcode/Templates/File Templates 

The folder name Custom/Interactor.xctemplate

Files inside that folder:

So when I right click and create new file, I will choose the custom file:

create new file

Creating custom file

The above example works and creates my custom file:

successfully creating a custom file

What I am trying to achieve:

I am trying to create a group that will contain the new custom file. No need for an actual folder or complicated tasks, simply a group that contains the actual file.

So the end result will be:

enter image description here

Since there is no documentation explaining how to create a custom template I have used many references: ref1, ref2, ref3, ref4.

Here is the TemplateInfo.plist file:

<?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>DefaultCompletionName</key>     <string>MyCustomInteractor</string>   <key>Description</key>   <string>Custom interactor</string>   <key>Kind</key>   <string>Xcode.IDEKit.TextSubstitutionFileTemplateKind</string>   <key>Options</key>   <array>         <dict>             <key>Description</key>             <string>Custom interactor</string>             <key>Identifier</key>             <string>fileName</string>             <key>Name</key>             <string>Custom name</string>             <key>NotPersisted</key>             <true/>             <key>Required</key>             <true/>             <key>Type</key>             <string>text</string>         </dict>     <dict>             <key>Default</key>             <string>___VARIABLE_fileName:identifier___</string>             <key>Identifier</key>             <string>productName</string>             <key>Type</key>             <string>static</string>     </dict>     <dict>             <key>Default</key>             <string>___VARIABLE_fileName:identifier___Interactor</string>             <key>Description</key>             <string>The interactor name</string>             <key>Identifier</key>             <string>interactorName</string>             <key>Name</key>             <string>Interactor Name:</string>             <key>Required</key>             <true/>             <key>Type</key>             <string>static</string>     </dict>   </array>   <key>Platforms</key>   <array>         <string>com.apple.platform.iphoneos</string>   </array>     <key>SortOrder</key>     <string>99</string> </dict> </plist> 

What I have tried:

I have tried to insert this answer into my TemplateInfo.plist but nothing happens. In my opinion it could be related to a scope issue - perhaps I am not inserting the Definitions or the Nodes keys in the right place. The xml Definitions and Nodes code snip I have been struggling with:

<key>Definitions</key> <dict>     <key>___FILEBASENAME___Interactor.swift</key>     <dict>         <key>Group</key>         <string>Custom Interactor</string>         <key>Path</key>         <string>___FILEBASENAME___Interactor.swift</string>     </dict> </dict>  <key>Nodes</key> <array>     <string>___FILEBASENAME___Interactor.swift</string> </array> 

So where should I insert those keys or what am I doing wrong ?

Any help would be much appreciated.

Thanks.

like image 260
OhadM Avatar asked Jan 05 '17 12:01

OhadM


1 Answers

you can create group as well as folder in project directory using this

<key>Swift</key>             <dict>                 <key>Nodes</key>                 <array>                     <string>ViewController.swift:comments</string>                     <string>ViewController.swift:imports:importCocoa</string>                     <string>ViewController.swift:implementation(___FILEBASENAME___: UIViewController)</string>                     <string>ViewController.swift:implementation:methods:viewDidLoad(override func viewDidLoad(\))</string>                     <string>ViewController.swift:implementation:methods:viewDidLoad:super</string>                     <string>ViewController.swift:implementation:methods:didReceiveMemoryWarning(override func didReceiveMemoryWarning(\))</string>                     <string>ViewController.swift:implementation:methods:didReceiveMemoryWarning:super</string>                     <string>Constant/CommonExtension.swift</string>                 </array>             </dict> 

and Definition just like this

    <key>Definitions</key> <dict>     <key>Base.lproj/Main.storyboard</key>     <dict>         <key>Path</key>         <string>Main.storyboard</string>         <key>SortOrder</key>         <integer>99</integer>     </dict>     <key>Group</key>     <array>         <string>Singletone</string>     </array>     <key>Constant/CommonExtension.swift</key>     <dict>         <key>Path</key>         <string>Constant/CommonExtension.swift</string>         <key>Group</key>         <array>             <string>Constant</string>         </array>     </dict> </dict> 
like image 154
Pratik Lad Avatar answered Sep 23 '22 09:09

Pratik Lad