11
votes

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?

3

3 Answers

23
votes

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.

2
votes

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).

1
votes

I need to set files that are not supposed to support ARC (mainly 3rd-party code).

In addition to managing the flags, you could simply create a static library for these sources, then link.