You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cordova.apache.org by Jacob Weber <ja...@jacobweber.com> on 2013/01/11 00:52:32 UTC

Should Automatic Reference Counting be on?

When I create a new iOS project with Cordova 2.3, Automatic Reference Counting (CLANG_ENABLE_OBJC_ARC) is turned off. And the code (e.g. AppDelegate.m) uses autorelease, which I'm pretty sure is incompatible with ARC.

Is this correct? Based on this blog post, I thought it should be on:
http://shazronatadobe.wordpress.com/2012/09/05/automatic-reference-counting-arc-and-cordova-plugins/

Jacob

Re: Should Automatic Reference Counting be on?

Posted by Shazron <sh...@gmail.com>.
ARC is off in the template, thus autorelease is valid. My reasons why ARC
is off are in the blog post - namely no one has upgraded plugins to ARC yet
and we will break everything. We can change this if course (Andrew filed an
issue) - I'll file an issue with plugman and the spec.

On Thursday, January 10, 2013, Jacob Weber wrote:

> When I create a new iOS project with Cordova 2.3, Automatic Reference
> Counting (CLANG_ENABLE_OBJC_ARC) is turned off. And the code (e.g.
> AppDelegate.m) uses autorelease, which I'm pretty sure is incompatible with
> ARC.
>
> Is this correct? Based on this blog post, I thought it should be on:
>
> http://shazronatadobe.wordpress.com/2012/09/05/automatic-reference-counting-arc-and-cordova-plugins/
>
> Jacob

Re: Should Automatic Reference Counting be on?

Posted by Shazron <sh...@gmail.com>.
+1 to what Brian said


On Mon, Jan 21, 2013 at 9:03 AM, Brian LeRoux <b...@brian.io> wrote:

> I say we roll w/ the assumption of #3 (but share your pragmatism that
> #2 will likely result).
>
> On Mon, Jan 21, 2013 at 10:27 AM, Andrew Grieve <ag...@chromium.org>
> wrote:
> > Not sure how to move forward with this. I don't think that asking plugin
> > devs to use macros to make their code work in both environments is
> > reasonable. We don't do that in any of our core plugins.
> >
> > I don't think plugin devs will be motivated to update their plugins to
> use
> > ARC until we change the default template to use ARC, and they get users
> > complaining.
> > If not using two libraries, then setting -fno-objc-arc on each file
> *will*
> > fix things, but it's not very obvious how to do that.
> >
> > Proposal #1:
> > -We add a plugin-wide setting to plugin.xml that says whether the plugin
> > uses ARC. We teach plugman to set the -fno-objc-arc flag for these. If
> the
> > plugin.xml ever changes this setting, then we need to edit the project
> file
> > and remove the flag.
> > -We don't change our default project template until CLI is our documented
> > way of creating projects.
> >
> > Proposal #2:
> > -We add a per-file setting to plugin.xml that says which files use ARC.
> We
> > teach plugman to set the -fno-objc-arc flag for these. If the plugin.xml
> > ever changes this setting, then we need to edit the project file and
> remove
> > the flag.
> > -We don't change our default project template until CLI is our documented
> > way of creating projects.
> >
> > Proposal #3:
> > -We assume plugman-installable plugins use ARC
> > -We don't change our default project template until CLI is our documented
> > way of creating projects.
> >
> > I like #3 since it's simpler, but I'm afraid we'll have to support #2 in
> > the end due to plugins that depend on third-party code.
> >
> >
> > On Fri, Jan 11, 2013 at 1:34 PM, Shazron <sh...@gmail.com> wrote:
> >
> >> Actually Cordova core has been ARC for a couple of releases now. Good
> idea
> >> for the plugin tool default to non-ARC, this should be covered in the
> >> spec...
> >>
> >> On Friday, January 11, 2013, Kerri Shotts wrote:
> >>
> >> > My two cents:
> >> >
> >> > If it's feasible to support ARC, I'd go for it. Having worked with ARC
> >> and
> >> > non-ARC code, ARC is definitely easier on my brain cells -- I'm far
> too
> >> > likely to leak memory like a sieve with manual memory management…
> >> >
> >> > That said, converting Cordova's base code from non-ARC to ARC may not
> be
> >> > trivial. In theory, you can just get rid of autoreleases, retains,
> >> > deallocs, and handle properties (assign/retain/copy --> weak,strong),
> but
> >> > sometimes you end up getting into toll-free bridging between Cocoa and
> >> Core
> >> > Foundation, and occasionally you run into more obscure problems (such
> as
> >> > ARC releasing the object before the code expected it. Easy to fix, but
> >> not
> >> > always /obvious/ prior to experiencing the issue.)
> >> >
> >> > Once we have ARC support, though,  the -fno-objc-arc compiler flag is
> a
> >> > per-file setting, so I would think that the plugin tools could set
> that
> >> > flag based on whether or not the plugin supported ARC or not. (I would
> >> > think this should be determined in the metadata somewhere? Perhaps
> >> > defaulting to no-ARC if there's no metadata saying one way or the
> other?)
> >> >
> >> >
> >> > On Jan 11, 2013, at 9:14 AM, Andrew Grieve <agrieve@chromium.org
> >> <javascript:;>>
> >> > wrote:
> >> >
> >> > > This caught me off-guard as well, and I filed an issue to fix it up:
> >> > > https://issues.apache.org/jira/browse/CB-2180
> >> > >
> >> > > I don't think it'll be entirely straight-forward though, because
> some
> >> > > plugins still do not support ARC.
> >> > >
> >> > > What are everyone's thoughts on how to address this? One option is
> to
> >> > have
> >> > > the default project template already set-up with two lib targets.
> One
> >> for
> >> > > ARC and one without ARC. Another option is to instruct users how to
> set
> >> > the
> >> > > compile flag to disable arc on a per-file basis.
> >> > >
> >> > > Do we want to support ARC and non-ARC plugins in plugman?
> >> > >
> >> > >
> >> > > On Thu, Jan 10, 2013 at 6:52 PM, Jacob Weber <jacob@jacobweber.com
> >> <javascript:;>>
> >> > wrote:
> >> > >
> >> > >> When I create a new iOS project with Cordova 2.3, Automatic
> Reference
> >> > >> Counting (CLANG_ENABLE_OBJC_ARC) is turned off. And the code (e.g.
> >> > >> AppDelegate.m) uses autorelease, which I'm pretty sure is
> incompatible
> >> > with
> >> > >> ARC.
> >> > >>
> >> > >> Is this correct? Based on this blog post, I thought it should be
> on:
> >> > >>
> >> > >>
> >> >
> >>
> http://shazronatadobe.wordpress.com/2012/09/05/automatic-reference-counting-arc-and-cordova-plugins/
> >> > >>
> >> > >> Jacob
> >> >
> >> >
> >>
>

Re: Should Automatic Reference Counting be on?

Posted by Brian LeRoux <b...@brian.io>.
I say we roll w/ the assumption of #3 (but share your pragmatism that
#2 will likely result).

On Mon, Jan 21, 2013 at 10:27 AM, Andrew Grieve <ag...@chromium.org> wrote:
> Not sure how to move forward with this. I don't think that asking plugin
> devs to use macros to make their code work in both environments is
> reasonable. We don't do that in any of our core plugins.
>
> I don't think plugin devs will be motivated to update their plugins to use
> ARC until we change the default template to use ARC, and they get users
> complaining.
> If not using two libraries, then setting -fno-objc-arc on each file *will*
> fix things, but it's not very obvious how to do that.
>
> Proposal #1:
> -We add a plugin-wide setting to plugin.xml that says whether the plugin
> uses ARC. We teach plugman to set the -fno-objc-arc flag for these. If the
> plugin.xml ever changes this setting, then we need to edit the project file
> and remove the flag.
> -We don't change our default project template until CLI is our documented
> way of creating projects.
>
> Proposal #2:
> -We add a per-file setting to plugin.xml that says which files use ARC. We
> teach plugman to set the -fno-objc-arc flag for these. If the plugin.xml
> ever changes this setting, then we need to edit the project file and remove
> the flag.
> -We don't change our default project template until CLI is our documented
> way of creating projects.
>
> Proposal #3:
> -We assume plugman-installable plugins use ARC
> -We don't change our default project template until CLI is our documented
> way of creating projects.
>
> I like #3 since it's simpler, but I'm afraid we'll have to support #2 in
> the end due to plugins that depend on third-party code.
>
>
> On Fri, Jan 11, 2013 at 1:34 PM, Shazron <sh...@gmail.com> wrote:
>
>> Actually Cordova core has been ARC for a couple of releases now. Good idea
>> for the plugin tool default to non-ARC, this should be covered in the
>> spec...
>>
>> On Friday, January 11, 2013, Kerri Shotts wrote:
>>
>> > My two cents:
>> >
>> > If it's feasible to support ARC, I'd go for it. Having worked with ARC
>> and
>> > non-ARC code, ARC is definitely easier on my brain cells -- I'm far too
>> > likely to leak memory like a sieve with manual memory management…
>> >
>> > That said, converting Cordova's base code from non-ARC to ARC may not be
>> > trivial. In theory, you can just get rid of autoreleases, retains,
>> > deallocs, and handle properties (assign/retain/copy --> weak,strong), but
>> > sometimes you end up getting into toll-free bridging between Cocoa and
>> Core
>> > Foundation, and occasionally you run into more obscure problems (such as
>> > ARC releasing the object before the code expected it. Easy to fix, but
>> not
>> > always /obvious/ prior to experiencing the issue.)
>> >
>> > Once we have ARC support, though,  the -fno-objc-arc compiler flag is a
>> > per-file setting, so I would think that the plugin tools could set that
>> > flag based on whether or not the plugin supported ARC or not. (I would
>> > think this should be determined in the metadata somewhere? Perhaps
>> > defaulting to no-ARC if there's no metadata saying one way or the other?)
>> >
>> >
>> > On Jan 11, 2013, at 9:14 AM, Andrew Grieve <agrieve@chromium.org
>> <javascript:;>>
>> > wrote:
>> >
>> > > This caught me off-guard as well, and I filed an issue to fix it up:
>> > > https://issues.apache.org/jira/browse/CB-2180
>> > >
>> > > I don't think it'll be entirely straight-forward though, because some
>> > > plugins still do not support ARC.
>> > >
>> > > What are everyone's thoughts on how to address this? One option is to
>> > have
>> > > the default project template already set-up with two lib targets. One
>> for
>> > > ARC and one without ARC. Another option is to instruct users how to set
>> > the
>> > > compile flag to disable arc on a per-file basis.
>> > >
>> > > Do we want to support ARC and non-ARC plugins in plugman?
>> > >
>> > >
>> > > On Thu, Jan 10, 2013 at 6:52 PM, Jacob Weber <jacob@jacobweber.com
>> <javascript:;>>
>> > wrote:
>> > >
>> > >> When I create a new iOS project with Cordova 2.3, Automatic Reference
>> > >> Counting (CLANG_ENABLE_OBJC_ARC) is turned off. And the code (e.g.
>> > >> AppDelegate.m) uses autorelease, which I'm pretty sure is incompatible
>> > with
>> > >> ARC.
>> > >>
>> > >> Is this correct? Based on this blog post, I thought it should be on:
>> > >>
>> > >>
>> >
>> http://shazronatadobe.wordpress.com/2012/09/05/automatic-reference-counting-arc-and-cordova-plugins/
>> > >>
>> > >> Jacob
>> >
>> >
>>

Re: Should Automatic Reference Counting be on?

Posted by Andrew Grieve <ag...@chromium.org>.
Not sure how to move forward with this. I don't think that asking plugin
devs to use macros to make their code work in both environments is
reasonable. We don't do that in any of our core plugins.

I don't think plugin devs will be motivated to update their plugins to use
ARC until we change the default template to use ARC, and they get users
complaining.
If not using two libraries, then setting -fno-objc-arc on each file *will*
fix things, but it's not very obvious how to do that.

Proposal #1:
-We add a plugin-wide setting to plugin.xml that says whether the plugin
uses ARC. We teach plugman to set the -fno-objc-arc flag for these. If the
plugin.xml ever changes this setting, then we need to edit the project file
and remove the flag.
-We don't change our default project template until CLI is our documented
way of creating projects.

Proposal #2:
-We add a per-file setting to plugin.xml that says which files use ARC. We
teach plugman to set the -fno-objc-arc flag for these. If the plugin.xml
ever changes this setting, then we need to edit the project file and remove
the flag.
-We don't change our default project template until CLI is our documented
way of creating projects.

Proposal #3:
-We assume plugman-installable plugins use ARC
-We don't change our default project template until CLI is our documented
way of creating projects.

I like #3 since it's simpler, but I'm afraid we'll have to support #2 in
the end due to plugins that depend on third-party code.


On Fri, Jan 11, 2013 at 1:34 PM, Shazron <sh...@gmail.com> wrote:

> Actually Cordova core has been ARC for a couple of releases now. Good idea
> for the plugin tool default to non-ARC, this should be covered in the
> spec...
>
> On Friday, January 11, 2013, Kerri Shotts wrote:
>
> > My two cents:
> >
> > If it's feasible to support ARC, I'd go for it. Having worked with ARC
> and
> > non-ARC code, ARC is definitely easier on my brain cells -- I'm far too
> > likely to leak memory like a sieve with manual memory management…
> >
> > That said, converting Cordova's base code from non-ARC to ARC may not be
> > trivial. In theory, you can just get rid of autoreleases, retains,
> > deallocs, and handle properties (assign/retain/copy --> weak,strong), but
> > sometimes you end up getting into toll-free bridging between Cocoa and
> Core
> > Foundation, and occasionally you run into more obscure problems (such as
> > ARC releasing the object before the code expected it. Easy to fix, but
> not
> > always /obvious/ prior to experiencing the issue.)
> >
> > Once we have ARC support, though,  the -fno-objc-arc compiler flag is a
> > per-file setting, so I would think that the plugin tools could set that
> > flag based on whether or not the plugin supported ARC or not. (I would
> > think this should be determined in the metadata somewhere? Perhaps
> > defaulting to no-ARC if there's no metadata saying one way or the other?)
> >
> >
> > On Jan 11, 2013, at 9:14 AM, Andrew Grieve <agrieve@chromium.org
> <javascript:;>>
> > wrote:
> >
> > > This caught me off-guard as well, and I filed an issue to fix it up:
> > > https://issues.apache.org/jira/browse/CB-2180
> > >
> > > I don't think it'll be entirely straight-forward though, because some
> > > plugins still do not support ARC.
> > >
> > > What are everyone's thoughts on how to address this? One option is to
> > have
> > > the default project template already set-up with two lib targets. One
> for
> > > ARC and one without ARC. Another option is to instruct users how to set
> > the
> > > compile flag to disable arc on a per-file basis.
> > >
> > > Do we want to support ARC and non-ARC plugins in plugman?
> > >
> > >
> > > On Thu, Jan 10, 2013 at 6:52 PM, Jacob Weber <jacob@jacobweber.com
> <javascript:;>>
> > wrote:
> > >
> > >> When I create a new iOS project with Cordova 2.3, Automatic Reference
> > >> Counting (CLANG_ENABLE_OBJC_ARC) is turned off. And the code (e.g.
> > >> AppDelegate.m) uses autorelease, which I'm pretty sure is incompatible
> > with
> > >> ARC.
> > >>
> > >> Is this correct? Based on this blog post, I thought it should be on:
> > >>
> > >>
> >
> http://shazronatadobe.wordpress.com/2012/09/05/automatic-reference-counting-arc-and-cordova-plugins/
> > >>
> > >> Jacob
> >
> >
>

Re: Should Automatic Reference Counting be on?

Posted by Shazron <sh...@gmail.com>.
Actually Cordova core has been ARC for a couple of releases now. Good idea
for the plugin tool default to non-ARC, this should be covered in the
spec...

On Friday, January 11, 2013, Kerri Shotts wrote:

> My two cents:
>
> If it's feasible to support ARC, I'd go for it. Having worked with ARC and
> non-ARC code, ARC is definitely easier on my brain cells -- I'm far too
> likely to leak memory like a sieve with manual memory management…
>
> That said, converting Cordova's base code from non-ARC to ARC may not be
> trivial. In theory, you can just get rid of autoreleases, retains,
> deallocs, and handle properties (assign/retain/copy --> weak,strong), but
> sometimes you end up getting into toll-free bridging between Cocoa and Core
> Foundation, and occasionally you run into more obscure problems (such as
> ARC releasing the object before the code expected it. Easy to fix, but not
> always /obvious/ prior to experiencing the issue.)
>
> Once we have ARC support, though,  the -fno-objc-arc compiler flag is a
> per-file setting, so I would think that the plugin tools could set that
> flag based on whether or not the plugin supported ARC or not. (I would
> think this should be determined in the metadata somewhere? Perhaps
> defaulting to no-ARC if there's no metadata saying one way or the other?)
>
>
> On Jan 11, 2013, at 9:14 AM, Andrew Grieve <agrieve@chromium.org<javascript:;>>
> wrote:
>
> > This caught me off-guard as well, and I filed an issue to fix it up:
> > https://issues.apache.org/jira/browse/CB-2180
> >
> > I don't think it'll be entirely straight-forward though, because some
> > plugins still do not support ARC.
> >
> > What are everyone's thoughts on how to address this? One option is to
> have
> > the default project template already set-up with two lib targets. One for
> > ARC and one without ARC. Another option is to instruct users how to set
> the
> > compile flag to disable arc on a per-file basis.
> >
> > Do we want to support ARC and non-ARC plugins in plugman?
> >
> >
> > On Thu, Jan 10, 2013 at 6:52 PM, Jacob Weber <jacob@jacobweber.com<javascript:;>>
> wrote:
> >
> >> When I create a new iOS project with Cordova 2.3, Automatic Reference
> >> Counting (CLANG_ENABLE_OBJC_ARC) is turned off. And the code (e.g.
> >> AppDelegate.m) uses autorelease, which I'm pretty sure is incompatible
> with
> >> ARC.
> >>
> >> Is this correct? Based on this blog post, I thought it should be on:
> >>
> >>
> http://shazronatadobe.wordpress.com/2012/09/05/automatic-reference-counting-arc-and-cordova-plugins/
> >>
> >> Jacob
>
>

Re: Should Automatic Reference Counting be on?

Posted by Kerri Shotts <ke...@gmail.com>.
My two cents:

If it's feasible to support ARC, I'd go for it. Having worked with ARC and non-ARC code, ARC is definitely easier on my brain cells -- I'm far too likely to leak memory like a sieve with manual memory management… 

That said, converting Cordova's base code from non-ARC to ARC may not be trivial. In theory, you can just get rid of autoreleases, retains, deallocs, and handle properties (assign/retain/copy --> weak,strong), but sometimes you end up getting into toll-free bridging between Cocoa and Core Foundation, and occasionally you run into more obscure problems (such as ARC releasing the object before the code expected it. Easy to fix, but not always /obvious/ prior to experiencing the issue.) 

Once we have ARC support, though,  the -fno-objc-arc compiler flag is a per-file setting, so I would think that the plugin tools could set that flag based on whether or not the plugin supported ARC or not. (I would think this should be determined in the metadata somewhere? Perhaps defaulting to no-ARC if there's no metadata saying one way or the other?)


On Jan 11, 2013, at 9:14 AM, Andrew Grieve <ag...@chromium.org> wrote:

> This caught me off-guard as well, and I filed an issue to fix it up:
> https://issues.apache.org/jira/browse/CB-2180
> 
> I don't think it'll be entirely straight-forward though, because some
> plugins still do not support ARC.
> 
> What are everyone's thoughts on how to address this? One option is to have
> the default project template already set-up with two lib targets. One for
> ARC and one without ARC. Another option is to instruct users how to set the
> compile flag to disable arc on a per-file basis.
> 
> Do we want to support ARC and non-ARC plugins in plugman?
> 
> 
> On Thu, Jan 10, 2013 at 6:52 PM, Jacob Weber <ja...@jacobweber.com> wrote:
> 
>> When I create a new iOS project with Cordova 2.3, Automatic Reference
>> Counting (CLANG_ENABLE_OBJC_ARC) is turned off. And the code (e.g.
>> AppDelegate.m) uses autorelease, which I'm pretty sure is incompatible with
>> ARC.
>> 
>> Is this correct? Based on this blog post, I thought it should be on:
>> 
>> http://shazronatadobe.wordpress.com/2012/09/05/automatic-reference-counting-arc-and-cordova-plugins/
>> 
>> Jacob


Re: Should Automatic Reference Counting be on?

Posted by Shazron <sh...@gmail.com>.
I'm not for the two targets thing - i think we should educate devs to
upgrade to ARC, and plugin devs to have preprocessor macros to mix ARC and
non-ARC so as to be compatible everywhere if they want.

On Friday, January 11, 2013, Andrew Grieve wrote:

> This caught me off-guard as well, and I filed an issue to fix it up:
> https://issues.apache.org/jira/browse/CB-2180
>
> I don't think it'll be entirely straight-forward though, because some
> plugins still do not support ARC.
>
> What are everyone's thoughts on how to address this? One option is to have
> the default project template already set-up with two lib targets. One for
> ARC and one without ARC. Another option is to instruct users how to set the
> compile flag to disable arc on a per-file basis.
>
> Do we want to support ARC and non-ARC plugins in plugman?
>
>
> On Thu, Jan 10, 2013 at 6:52 PM, Jacob Weber <jacob@jacobweber.com<javascript:;>>
> wrote:
>
> > When I create a new iOS project with Cordova 2.3, Automatic Reference
> > Counting (CLANG_ENABLE_OBJC_ARC) is turned off. And the code (e.g.
> > AppDelegate.m) uses autorelease, which I'm pretty sure is incompatible
> with
> > ARC.
> >
> > Is this correct? Based on this blog post, I thought it should be on:
> >
> >
> http://shazronatadobe.wordpress.com/2012/09/05/automatic-reference-counting-arc-and-cordova-plugins/
> >
> > Jacob
>

Re: Should Automatic Reference Counting be on?

Posted by Andrew Grieve <ag...@chromium.org>.
This caught me off-guard as well, and I filed an issue to fix it up:
https://issues.apache.org/jira/browse/CB-2180

I don't think it'll be entirely straight-forward though, because some
plugins still do not support ARC.

What are everyone's thoughts on how to address this? One option is to have
the default project template already set-up with two lib targets. One for
ARC and one without ARC. Another option is to instruct users how to set the
compile flag to disable arc on a per-file basis.

Do we want to support ARC and non-ARC plugins in plugman?


On Thu, Jan 10, 2013 at 6:52 PM, Jacob Weber <ja...@jacobweber.com> wrote:

> When I create a new iOS project with Cordova 2.3, Automatic Reference
> Counting (CLANG_ENABLE_OBJC_ARC) is turned off. And the code (e.g.
> AppDelegate.m) uses autorelease, which I'm pretty sure is incompatible with
> ARC.
>
> Is this correct? Based on this blog post, I thought it should be on:
>
> http://shazronatadobe.wordpress.com/2012/09/05/automatic-reference-counting-arc-and-cordova-plugins/
>
> Jacob