Whenever I create a new .cpp/.h file in Xcode a comment is added to the top of the file. For example:
/*
* <file>.cpp
* <Name of project>
*
* Created by <My name> on <Date>.
* Copyright <Year and company>. All rights reserved.
*
*/
I want to change the default comment to be another license, like GPL/LGPL/ or something else. Is there somewhere I can change this behavior in Xcode?
With Xcode 9 there is a built-in option which you can find in the details below.
Create a property list file named IDETemplateMacros.plist
Add a FILEHEADER value to the Root and set its string value with your copyright text like Copyright © 2017 ...
Copy the file to one of the following locations
For a single project and user
<ProjectName>.xcodeproj/xcuserdata/[username].xcuserdatad/IDETemplateMacros.plist
For all team members in a single project
<ProjectName>.xcodeproj/xcshareddata/IDETemplateMacros.plist
For all projects in a workspace for a single user
<WorkspaceName>.xcworkspace/xcuserdata/[username].xcuserdatad/IDETemplateMacros.plist
For all projects in a workspace for all team members
<WorkspaceName>.xcworkspace/xcshareddata/IDETemplateMacros.plist
For everything you work on, regardless of project
~/Library/Developer/Xcode/UserData/IDETemplateMacros.plist
Create a new file - you should see the new copyright header
Sample IDETemplateMacros.plist for copy and paste:
<?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>FILEHEADER</key>
<string>
// Created by Your Name on 29.12.17.
// Copyright © 2017 Your Company. All rights reserved.
// </string>
</dict>
</plist>
First try changing your Name and Organization your contact card in Address Book.
If that doesn't work, open System Preferences > Users & Groups > Right click on your user (System Preferences must already be unlocked) > Advanced Options... > Change the name in the Full Name text box.
To change the organization name in Xcode click on the project file so it is selected (left sidebar of Xcode in the Project navigator) > In the File Inspector (right sidebar of Xcode) change the Organization text box.
This blog post has some good steps for modifying file templates in Xcode 4.3:
http://error-success.piku.org.uk/2012/04/27/how-to-make-xcode-4-3-2-templates/
The /Developer folder no longer exists, so you copy the templates from within the Xcode.app bundle located in /Applications:
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File\ Templates/
And place your modified copy here, as before:
~/Library/Developer/Xcode/Templates/File\ Templates/
UPDATE: I decided to write a script that would extract the built in Xcode templates and replace the headers. Source and instructions can be found at the following url:
https://github.com/royclarkson/xcode-templates
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates
any update of your SDK will wipe changes here so keep your template backed up somewhere else
Don't edit anything in /Developer as Apple can overwrite this at any time.
The following works for Xcode 4, 5 and 6 except later source differs and is under /Applications
Instead copy the templates that you want to change from /Applications/Xcode<version>.app/Contents/Developer/Library/Xcode/Templates to ~/Library/Developer/Xcode/Templates/File Templates and then edit the files keeping the same directory structure but edit the directory name that is the template to not show up a a duplicate in Xcode.
e.g for a new category of C/C+ files in Xcode 5 copy /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File Templates/C and C++ to ~/Library/Developer/Xcode/Templates/File Templates/GPL C and C++
this process is copied from Red Glasses's blog
For Xcode 4 the source path is or for Xcode 4 /Developer/Library/Xcode/Templates/File Templates
– Press ⌘ 1 to display the File Navigator.
– Click on the name of your project at the top of the File Navigator.
– Press ⌘⌥⇧ ⏎ (that's Command Option Shift Return) to view the Version Editor.
– Make sure that the Comparison View is shown(View > Version Editor > Show Comparison View).
This lets you see the raw text of your project's project.pbxproj file.
– Press ⌘ f to search the project.pbxproj file, paste in ORGANIZATIONNAME and press Return.
This is where the name of the organization that follows the copyright text is defined.
Or open Xcode's plist at
~/Library/Preferences/com.apple.dt.Xcode.plist
And change the organizationName key's value.
Or select the project from the Navigator pane and display the File Inspector with ⌘⌥ 1.
Look at the Organization value under Project Document. Change the value there.
In Xcode 12.4
Using Xcode, create a plist file named IDETemplateMacros.
Save it to the Desktop initially while you configure it.
If you cannot see the file in the Project Navigator then from the Xcode menu, select View > Navigators > Project
Right click on the filename and select Open as > Source Code
The following is a template that works nicely for me so chances are it will for you too.
<?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>FILEHEADER</key>
<string>
//
// ___FILENAME___
// ___PACKAGENAME___
//
// Created by ___FULLUSERNAME___ on ___DATE___
// Copyright © ___YEAR___ ___FULLUSERNAME___. All rights reserved.
//
</string>
</dict>
</plist>
Copy and paste the above overwriting the existing contents.
Save the file and close it.
In Finder navigate to the following folder:
~/Library/Developer/Xcode/UserdData/
Drag the file from your Desktop to this Folder and then test using Xcode to create a new project.
It's very simple:
Open up terminal
In one line, write the following:
defaults write com.apple.Xcode PBXCustomTemplateMacroDefinitions -dict ORGANIZATIONNAME "Blah, Inc"
You don't have to worry about changing directories beforehand or anything else. It works instantly.
Change the details in your Address Book - add a company name. It will pick it up from there.
Try modifying this file:
/Developer/Library/Xcode/File\ Templates/C\ and\ C++/Header\ File.pbfiletemplate/header.h
Works with Xcode 14
Say you want to modify (or get rid of) the XCode Header comment.
First open XCode, Use File > New File... (⌘N) and choose Property List from the file templates.
Name it file IDETemplateMacros.plist
On the navigator, select the file as right-click Open as source code. Xcode will show us the property file as text. Property files are really just XML files.
Copy paste the following content:
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>FILEHEADER</key>
<string>Created for ___PROJECTNAME___ in ___YEAR___
// Using Swift ___DEFAULTTOOLCHAINSWIFTVERSION___</string>
</dict>
</plist>
On the root dict we have added an entry with key FILEHEADER and a two-lines string as a value:
Created for ___PROJECTNAME___ in ___YEAR___
// Using Swift ___DEFAULTTOOLCHAINSWIFTVERSION___
Save the file IDETemplateMacros.plist on the folder:
~/Library/Developer/Xcode/UserData/
That's it, now when creating a new project called MyProject, the header will be:
//Created for MyProject in 2022
// Using Swift 5.0
Note1. There is a list of macros on https://help.apple.com/xcode/mac/9.0/index.html?localePath=en.lproj#/dev7fe737ce0
Note 2. As an example you can write:
Created ___DATE___
// ___COPYRIGHT___
Note that there is a leading space but you do not include the // for the comment on the first line.
Note 3. For a more list of options see:
https://useyourloaf.com/blog/changing-xcode-header-comment/
In Xcode 4.2, they're here:
/Developer/Library/Xcode/Templates/File Templates
I just changed the template of a SwiftUI file, you have to open Xcode's Contents and look for the template files you want to change.
To change the SwiftUI template the path is this:
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File\ Templates/MultiPlatform/User\ Interface/SwiftUI\ View.xctemplate
You nedd open with sudo
For AppCode users:
Go to preferences (CMD + ,)
Editor-File and Code Templates
Change Scheme to Project
Modify Files and/or Includes as you need.
add to git .idea/fileTemplates if needed
You can override the text macros globally, or for an individual workspace or project. You can also decide to keep the macros for a single user or share it with all users.
The full list of locations that Xcode searches, in order of priority:
Project - single user
<ProjectName>.xcodeproj/xcuserdata/[username].xcuserdatad/
Project - shared by all users
<ProjectName>.xcodeproj/xcshareddata/
Workspace - single user
<WorkspaceName>.xcworkspace/xcuserdata/[username].xcuserdatad/
Workspace - shared by all users
<WorkspaceName>.xcworkspace/xcshareddata/
Globally for Xcode
~/Library/Developer/Xcode/UserData/
I don't remember what was the default template but you can make a template in any way you like using textMacros:
// ___FILENAME___
// ___PACKAGENAME___
//
// Created by ___FULLUSERNAME___ on ___DATE___.
// ___COPYRIGHT___
//
There are some other textMacros if you like more customization, but these are enough for making something like the default one.
You can create the file yourself if no files found at the path
Related
i create a cocoa application project, and add target "Finder sync extension". Then the "finderSync.appex" will be put to ".../Contens/Plugins/" folder. But when i launch the application, the extension is not loaded automatically, should i load it manually ? How can i load it ?
From the Apple developement guide, it says:
For OS X to recognize and automatically load the Finder Sync extension, the extension target’s info.plist file must contain the following entries:
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict/>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.FinderSync</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).FinderSync</string>
</dict>
I already set as the above, but it doens't work.
You need to register your extension with Finder:
pluginkit -a <path you your appex>
You might also need to tell Finder to enable your extension:
pluginkit -e use -i <ID of you appex>
When building for iOS, Facebook's PostProcessBuild method, OnPostProcessBuild, tries to parse some data to do some things, like adding the Facebook libraries to the final XCode project.
The parser receives a wrong file format. In its Decode() method, it expects data that begins with:
public const string PBX_HEADER_TOKEN = "// !$*UTF8*$!\n";
like this:
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/ Begin PBXBuildFile section /
011C65182C1C4E78903D645B / libxml2.dylib / = {isa = PBXBuildFile; fileRef = 318C8AB7C5D04BBFA6BA701D / libxml2.dylib /; };
but instead, it receives a string with the project.pbxproj contents, in the correct xml format. like this:
<?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>archiveVersion</key>
<string>1</string>
<key>classes</key>
<dict/>
<key>objectVersion</key>
<string>46</string>
<key>objects</key>
<dict>
Is anybody else experiencing this?
I found these questions to be related, but none of them answers the real issue.
FacebookSDK for Unity iOS Mach-O linker error - undefined symbols _iosLogin,
http://forum.unity3d.com/threads/mach-o-linker-error-with-facebook-sdk.239085/
Any ideas on how to solve it?
You can force FB to make its changes the project.pbxproj file later, when the file is back in the original PBX format:
By changing the line [PostProcessBuild(100)] to [PostProcessBuild(99999999)] in file FacebookPostprocess.cs.
I have the same problem. After I installed another plugin that modifies the project.pbxproj file the data coming in the PBXParser is in xml1 format. I found somewhere that it is easy to modify the json like format, but hard to save it in a format that Xcode can understand. The standard process is to save it in xml1 format. Xcode can understand the xml1 format, so this is not a problem.
So my workaround is as follow:
Run the build as usual.
After the build fails close Xcode (Xcode will write the project file in the right json format on close).
Copy the modified project.pbxproj file to another location.
Change the PBXParser to read the data from the modified file if in xml
format!
Run the build again.
This isn't very clean, but worked for me. Better option will be to convert the xml to json for the PBXParser...
I'm trying to add the syntax plugin for the Go programming language in Notepad++.
There is a repository for such user-defined languages. I downloaded and unzipped the Go files, which contained a README, a userDefinedLang_Go.xml, and go.xml.
I attempted to follow the instructions at the bottom of the page as follows. Since I am using Windows 7 (x64), my Notepad++ directory is "C:\Program Files (x86)\Notepad++".
Having not installed a user defined language before, I didn't have a userDefinedLang.xml file already, so I copied userDefinedLang_Go.xml into the root directory, and renamed it to remove the "_Go", making it userDefinedLang.xml.
I then copied go.xml into C:\Program Files (x86)\Notepad++\plugins\APIs\
This seems to be all of the steps necessary. However, when I open Notepad++, there is no "Go" near "Lang => User Defined", and there is no syntactic coloring on a .go file. Attempting to import via "View => User-Defined Dialogue => import" gives a "fail to import" error.
What am I doing wrong? I'm using a clean installation of Notepad++, which is version 6.1.8.
I had to put my userDefineLang.xml file in my AppData\Roaming folder:
C:\Users\[user]\AppData\Roaming\Notepad++
New install of Notepad++ 6.4.5 on Windows 7 64 bit
Download from Notepad++ site:
http://docs.notepad-plus-plus.org/index.php?title=User_Defined_Language_Files#G
Copy "go.xml" to C:\Program Files (x86)\Notepad++\plugins\APIs.
The default install doesn't have any user-defined languages, so you can do this:
Copy "userDefineLang_Go.xml" to C:\Users\\AppData\Roaming\Notepad++
Remove the "_Go" from the file name, so it's "userDefineLang.xml"
Uncomment the opening and closing "NotepadPlus" tags.
(If you already have a userDefineLang.xml then add the content from the _Go file.)
Restart Notepad++.
I just got it working on my system after some tinkering. Put this at the top of the userDefinedLang.xml file and the go.xml file:
<?xml version="1.0" encoding="Windows-1252" ?>
That should do the trick (after reopening Notepad++).
go.xml should be in the plugins/APIs folder, and userDefinedLang.xml goes in the root of Notepad++ as you said.
Something other answers do not discuss: Some older versions of Notepad++ do not appear to work with any of these answers.
I tried pretty much all the solutions before upgrading Notepad++ to version 6.4.2.
xkcd 979
Tested Notepad++ versions:
5.9 - not working - tested by namey
6.4.2 - working - tested by Elysian Fields
6.6.9 - working - tested by namey
For other versions your mileage may vary.
I share the solution I found for Notepad++ 6.5, because I had the same issue than the previous messages.
If not done, do the install steps explained in go\misc\notepadplus\README (userDefineLang.xml,functionList.xml,APIs).
When you don 't have useDefineLang.xml in Notepad++, create one using the file from go\misc\notepadplus\useDefineLang.xml, but don't forget to add the first line <?xml version="1.0" encoding="Windows-1252" ?>
and uncomment NotepadPlus part to have <NotepadPlus> at the beginning and </NotepadPlus> at the end.
Change in functionList.xml: <association ext=".go" id="go"/> BY <association userDefinedLangName="go" id="go"/>
As I didn't have any userDefineLang.xml file by default in Notepad++, I imported this file using the menu Language → Define your language → *Import.
Then stop/start Notepad++.
Check that Go is in the Language menu at the end of the list.
Open a .go file. If the color doesn't change automatically click on go in /Language menu
All were OK after that for me (indentation, color, autocompletion, etc.).
I added pl/sql language syntax to Notepad++. The syntax /language was on the web. Here's how I got it to work ...
Open the XML file using Notepad and added <?xml version="1.0" encoding="Windows-1252" ?> to the very beginning, as David had suggested. Then save it to userDefinedLang_plsql.xml
Paste the file in the Notepad++ root directory.
I also copied it into C:\Program Files (x86)\Notepad++\plugins\APIs\, and navigated to menu Languages → Userdefined, but it did nothing.
So, I then went to menu Languages → Define your language and selected pl/sql from the drop down, renamed it, and saved it in that dialog window.
The new language then it appeared in the language dialog at the end.
userDefineLang resides in C:\Users\username\AppData\Roaming\Notepad++\userDefineLang.xml.
Make sure your Notepad++ is installed under "C:\Program Files(86)", and not under "C:\npp.#.#.#.bin" folder.
And download from https://notepad-plus-plus.org/download. Or simply google "Download Notepad++".
Check out a sample Scala language userDefineLang.xml file here: https://github.com/nfang/scala-syntax-highlighter
If you don't have any user languages defined before, then after renaming userDefinedLang_Go.xml to userDefinedLang.xml, also edit the text of file by adding the tags <NotepadPlus></NotepadPlus> around the original content.
Apple's document on submitting an app to the Mac App store contains this example use of the command productbuild, from in /Developer/usr/bin/.
productbuild \
--component build/Release/Sample.app /Applications \
--sign "3rd Party Mac Developer Installer: Name1 Name2" \
--product product_definition.plist Sample.pkg
When I run this command on my Sample app, I get the error:
productbuild: error: No product definition plist found at
"product_definition.plist".
What is this product_definition.plist, where should it come from, what should be inside it, and what tool should be used to create this plist?
From the Apple document you linked: "You should specify a single component, a signature, and (optionally) a product definition file."
Unless you have a specific requirement, you don't need a product definition file. If you need it, the man page of productbuild has a lot of information. It is just a plist dictionary, like this example:
<?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>gl-renderer</key>
<string>( 'GL_APPLE_float_pixels' IN extensions )</string>
</dict>
</plist>
I've verified that Xcode doesn't use a product definition file when you share an archived application as package. This is the actual command line:
/usr/bin/productbuild --component <path-to-xcarchive>/Cool.app
/Applications
<tmp-path>/package.pkg
--sign 3rd Party Mac Developer Installer
If you run man productbuild and look for the section PRODUCT DEFINITION PROPERTY LIST which starts with
PRODUCT DEFINITION PROPERTY LIST
When you use productbuild to synthesize a distribution (e.g. with the --component option), you can specify additional parameters and
requirements in a separate property list file, specified with the --product option. At the top level, this property list is a dictio-
nary, with the following keys:
Key Description
os Minimum allowable OS versions (array of strings)
arch Supported architectures (array of strings)
ram Minimum required RAM in gigabytes (real)
bundle Specific bundles that must exist on the system (array of dictionaries)
all-bundles Are all of the bundles specified required? (Boolean)
gl-renderer Required OpenGL capabilities (string)
cl-device Required OpenCL capabilities (string)
single-graphics-device Must OpenGL and OpenCL requirements be met by a single device? (Boolean)
home Should installation be allowed in user home directory? (Boolean)
Lots more information is given, which you should be able to generate with XCode or a text editor.
Within XCode just create a new plist and add the key/value pairs according to your requirements and the possible values listed in the man file.
I'm using the opensource GUI frontend for rsync called "arRsync". It works great, but there's no way to automate it.
What I'm trying to do is use Applescript to run a preset (which you define in the Application) using the following simple script:
tell application "arRsync" to runPreset "presetTest1"
The problem is Applescript thinks "runPreset" is a variable, not a command. I've also tried a tell/end-tell variation of the above, no dice. The 'runPreset' command is part of arRsync.sdef
You can find the arRsync project here
I've tried opening up both Info.plist files inside the app and ticking the 'Scriptable' box (or setting it to 'true' for those of you without Property List Editor) but I'm still stuck.
I'm a scripting noob when it comes to Cocoa :p help would be greatly appreciated
The arRsync binary is missing a scripting dictionary. Build from source, first making the following changes:
Edit Info.plist in the project, setting the "Scriptable" option to true.
Fix the project's script dictionary, arRsync.sdef. The code for the runPreset command has one letter too few (command codes must be two FourCCs, or eight characters, long). Add a character to runPreset's code attribute; just about any character will work. If you want, the file can be shortened and simplified by replacing the Standard and Text suites with an include. Back up the orignal file and make a new arRsync.sdef containing:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dictionary SYSTEM "file://localhost/System/Library/DTDs/sdef.dtd">
<dictionary title="arRsync Terminology"
xmlns:xi="http://www.w3.org/2003/XInclude">
<xi:include href="file:///System/Library/ScriptingDefinitions/CocoaStandard.sdef"
xpointer="xpointer(/dictionary/suite)"/>
<suite name="arRsync Suite" code="arRs">
<command name="runPreset" code="runPPrst">
<cocoa name="runPreset" class="scriptController"/>
<direct-parameter type="any"/>
</command>
</suite>
</dictionary>
Alternatively, you could just replace the runPreset command element with the one from above.
Add arRsync.sdef to the "Copy Bundle Resources" phase of the arRsync target
Switch to a Release build ("Blackbeard" is the name for the debug build).
Build it.
That should produce a scriptable version of arRsync. As you've already figured out, you also might need to play with the target SDK.