Shazron Abdullah created CB-8863:
------------------------------------
Summary: 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 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.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]