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]

Reply via email to