Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Batch adding "-fno-objc-arc" flag to (multiple) source files

After converting an Xcode project to ARC (Automatic Reference Counting), I need to disable ARC for some of my source files (mainly third-party code).

I know I need to set the "-fno-objc-arc" flag for each of these files, but Xcode doesn't give me a option for batch editing - I need to add this flag to each file manually, which may be tedious if you need to set it for multiple files.

Does anyone have a smart approach to this?

like image 297
Chris Chen Avatar asked Apr 17 '12 02:04

Chris Chen


2 Answers

Select the ones you want to add the flag to (using Shift and/or Command) and press Enter to display the flag editor. Press Done to apply the entered flag(s) to the selected file(s).

Tutorial

I have composed a blog post to serve as a tutorial for this process.

like image 54
Evan Mulawski Avatar answered Oct 19 '22 03:10

Evan Mulawski


By far the simplest option is just use the ARC conversion tool under Edit > Refactor.

It's not very clear, but basically you just check any files you want to use ARC and uncheck any that you don't. This will do the following:

1) Files that are unchecked will have the -fno-objc-arc flag applied

2) Files that are checked will be converted to ARC

3) Files that are checked that have already been converted to ARC will be untouched

Read that again carefully. What sometimes confuses people is that they assume that files that are already converted should be left unchecked when running the tool again, but this will incorrectly apply the -fno-objc-arc to those files (resulting in leaks).

You should think of the ARC Conversion tool as a "batch-select ARC compatible files and convert files that aren't already ARC" tool instead of a straight conversion tool.

You can run the conversion tool as many times as you want - the effects are not cumulative (although converting files to ARC is not reversible).

like image 37
Nick Lockwood Avatar answered Oct 19 '22 02:10

Nick Lockwood