[
https://issues.apache.org/jira/browse/CB-8863?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Shazron Abdullah updated CB-8863:
---------------------------------
Description:
Audit the core plugins to check for proper blocks usage.
Problems that I see can be summed up in this (fixed) code:
https://github.com/apache/cordova-plugin-splashscreen/blob/fa60f01adcba2d21583de7972a0facc4da1eb75e/src/ios/CDVSplashScreen.m#L292-L313
1. You need a weak reference to "self" in blocks to prevent retain cycle
problems.
Fix:
https://github.com/apache/cordova-plugin-splashscreen/blob/fa60f01adcba2d21583de7972a0facc4da1eb75e/src/ios/CDVSplashScreen.m#L292
2. Anything that calls UIKit methods, which includes plugins that write
JavaScript back to the UIWebView (commandDelegate functions), must be called in
the main thread.
Fix:
https://github.com/apache/cordova-plugin-splashscreen/blob/fa60f01adcba2d21583de7972a0facc4da1eb75e/src/ios/CDVSplashScreen.m#L308-L310
3. Avoid creating private variables like this in the first place -- I would
create a class extension which will effectively have "private" properties
(nothing is truly private in objc). This is to avoid this situation in the
block where you have to cast the weak self into a strong self (and check it's
still around), just to access a private variable:
https://github.com/apache/cordova-plugin-splashscreen/blob/fa60f01adcba2d21583de7972a0facc4da1eb75e/src/ios/CDVSplashScreen.m#L298-L304
Of course since we are modifying UIKit items here, rule 2 above also applies.
was:
Audit the core plugins to check for proper blocks usage.
Problems that I see can be summed up in this (fixed) code:
https://github.com/apache/cordova-plugin-splashscreen/blob/fa60f01adcba2d21583de7972a0facc4da1eb75e/src/ios/CDVSplashScreen.m#L292-L313
1. You need a weak reference to "self" in blocks to prevent retain cycle
problems.
Fix:
https://github.com/apache/cordova-plugin-splashscreen/blob/fa60f01adcba2d21583de7972a0facc4da1eb75e/src/ios/CDVSplashScreen.m#L292
2. Anything that calls UIKit methods, which includes plugins that write
JavaScript back to the UIWebView (commandDelegate functions), must be called in
the main thread.
Fix:
https://github.com/apache/cordova-plugin-splashscreen/blob/fa60f01adcba2d21583de7972a0facc4da1eb75e/src/ios/CDVSplashScreen.m#L308-L310
3. Avoid creating private variables like this in the first place -- I would
create a class extension which will then can have "private" properties. This is
to avoid this situation in the block where you have to cast the weak self into
a strong self (and check it's still around), just to access a private variable:
https://github.com/apache/cordova-plugin-splashscreen/blob/fa60f01adcba2d21583de7972a0facc4da1eb75e/src/ios/CDVSplashScreen.m#L298-L304
Of course since we are modifying UIKit items here, rule 2 above also applies.
> Fix potential problems with blocks usage in core plugins
> --------------------------------------------------------
>
> Key: CB-8863
> URL: https://issues.apache.org/jira/browse/CB-8863
> Project: Apache Cordova
> Issue Type: Bug
> Components: iOS
> Reporter: Shazron Abdullah
>
> Audit the core plugins to check for proper blocks usage.
> Problems that I see can be summed up in this (fixed) code:
> https://github.com/apache/cordova-plugin-splashscreen/blob/fa60f01adcba2d21583de7972a0facc4da1eb75e/src/ios/CDVSplashScreen.m#L292-L313
> 1. You need a weak reference to "self" in blocks to prevent retain cycle
> problems.
> Fix:
> https://github.com/apache/cordova-plugin-splashscreen/blob/fa60f01adcba2d21583de7972a0facc4da1eb75e/src/ios/CDVSplashScreen.m#L292
> 2. Anything that calls UIKit methods, which includes plugins that write
> JavaScript back to the UIWebView (commandDelegate functions), must be called
> in the main thread.
> Fix:
> https://github.com/apache/cordova-plugin-splashscreen/blob/fa60f01adcba2d21583de7972a0facc4da1eb75e/src/ios/CDVSplashScreen.m#L308-L310
> 3. Avoid creating private variables like this in the first place -- I would
> create a class extension which will effectively have "private" properties
> (nothing is truly private in objc). This is to avoid this situation in the
> block where you have to cast the weak self into a strong self (and check it's
> still around), just to access a private variable:
> https://github.com/apache/cordova-plugin-splashscreen/blob/fa60f01adcba2d21583de7972a0facc4da1eb75e/src/ios/CDVSplashScreen.m#L298-L304
> Of course since we are modifying UIKit items here, rule 2 above also applies.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]