Monday, May 2, 2011

XCode 4 Template

The new Xcode 4 cannot use the old Xcode 3 templates. There are a few changes

1. Template folder location
/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates
/Users/<username>/Library/Developer/Xcode/Templates/


mkdir -p ~/Library/Developer/Xcode/Templates



2. The Templates are in folders like

iPad Base.xctemplate, iPhone Base.xctemplate, Cocoa Touch Application.xctemplate
View-based Application.xctemplate Window-based Application.xctemplate

3. The Ancestors, Definitions and Options are defined in TemplateInfo.plist

4. To add files in the Template, you should define them in Definitions like

    <key>Definitions</key>
      <dict>
        <key>___PACKAGENAMEASIDENTIFIER___MyController.h</key>
        <dict>
          <key>Group</key>
          <string>My Classes</string>
          <key>Path</key>
          <string>Classes/___PACKAGENAMEASIDENTIFIER___MyController.h</string>
        </dict>
        <key>___PACKAGENAMEASIDENTIFIER___MyController.m</key>
        <dict>
          <key>Group</key>
          <string>My Classes</string>
          <key>Path</key>
          <string>Classes/___PACKAGENAMEASIDENTIFIER___MyController.m</string>
        </dict>
        <key>README</key>
        <dict>
          <key>Path</key>
          <string>README</string>
<!-- excluded in targets -->
          <key>TargetIndices</key>
          <array/>
        </dict>
<!-- Other definitions here -->
      </dict>


Also define in Nodes

      <key>Nodes</key>
      <array>
        <string>___PACKAGENAMEASIDENTIFIER___MyController.h</string>
        <string>___PACKAGENAMEASIDENTIFIER___MyController.m</string>
        <string>README</string>
<!-- Other nodes here -->
      </array>


5. To add build stage for existing Target


    <key>Targets</key>
    <array>
      <dict>
        <key>BuildPhases</key>
        <array>
          <dict>
            <key>Class</key>
            <string>ShellScript</string>
            <key>ShellPath</key>
            <string>/bin/bash</string>
            <key>ShellScript</key>
            <string>ls -l</string>
          </dict>
        </array>
      </dict>
<!-- Other targets here -->
    </array>


6. Add New Target

    <key>Targets</key>
    <array>
<!-- Default target here -->
      <dict>
        <key>Name</key>
          <string>My Target for ___PACKAGENAME___</string>
          <key>TargetType</key>
          <string>Aggregate</string>
          <key>SharedSettings</key>
          <dict>
            <key>PRODUCT_NAME</key>
            <string>$(TARGET_NAME)</string>
          </dict>
        <key>BuildPhases</key>
        <array>
          <dict>
            <key>Class</key>
            <string>ShellScript</string>
            <key>ShellPath</key>
            <string>/bin/bash</string>
            <key>ShellScript</key>
            <string>ls -l</string>
          </dict>
        </array>
      </dict>
    </array>



For ShellScript, please use html codes like these





&lt; <
&gt; >
&amp; &





.
.
.

Sunday, May 1, 2011