Arc conversion #6

merged 19 commits into from Mar 18, 2016


None yet

3 participants


No description provided.

NickAger added some commits Jan 29, 2016
@NickAger NickAger fixed some iOS9 deprecated warnings
The warnings:

NSString+UriCompatibility.m:37:27: warning:
'CFURLCreateStringByAddingPercentEscapes' is deprecated: first
deprecated in iOS 9.0 - Use [NSString
stringByAddingPercentEncodingWithAllowedCharacters:] instead, which
always uses the recommended UTF-8 encoding, and which encodes for a
specific URL component or subcomponent (since each URL component or
subcomponent has different rules for what characters are valid)

NSString+UriCompatibility.m:55:31: warning:
'CFURLCreateStringByReplacingPercentEscapesUsingEncoding' is
deprecated: first deprecated in iOS 9.0 - Use [NSString
stringByRemovingPercentEncoding] or
CFURLCreateStringByReplacingPercentEscapes() instead, which always uses
the recommended UTF-8 encoding.
@NickAger NickAger ARC conversion
currently untested
@NickAger NickAger fixed test failures 63cbce6
@NickAger NickAger Merge branch 'master' into ARC-conversion 2362078
@NickAger NickAger Fixed: memory leaks; modernised Objective-C
Convert the OS X project to use ARC
@NickAger NickAger Fixed: memory leaks; modernised Objective-C
Fixed some memory leaks caused by the ARC conversion.
Modernised Objective-C by:
1) Running the “Convert to modern Objective-C syntax” tool, which:
   * converted NSArray indexing to use the `[]` syntax
   * converted boxed literals to use the `@()` syntax
   * favours dot syntax over square brackets
   * converted `id` to `instancetype` on `init..` methods
2) Manually converted to use automatic synthesis of properties; removed
the instance variables backing store and checked access to the instance
variables to go through the property e.g. `Diff_EditCost` becomes
3) Added array annotations to help with Swift interop
4) Wrapped in the header in `NS_ASSUME_NONNULL_BEGIN` …
`NS_ASSUME_NONNULL_END` again to aid Swift interop
5) Fixed some memory leaks caused by methods returning core-foundation
objects (`CFArrayxxx`, `CFStringxxx`) with a +1 retain count; changed
`__bridge` to `CFBridgingRelease`
@NickAger NickAger updated Podspec as builds now require ARC 68ccee1
@NickAger NickAger Improved Swift interop
Added Objective-C array generic parameterisation for improved Swift

However to import the ‘DiffMatchPatch` API cleanly into Swift required
changing API methods to return `NSArray` rather than `NSMutableArray`.

Returning `NSArray` as opposed to `NSMutableArray` required some
massaging of `NSArray` -> `NSMutableArray` within methods.

However the following methods changes their semantics; changing from:
`- (void)diff_cleanupSemantic:(NSMutableArray *)diffs;`
`- (void)diff_cleanupSemanticLossless:(NSMutableArray *)diffs;`
`- (void)diff_cleanupEfficiency:(NSMutableArray *)diffs;`
`- (void)diff_cleanupMerge:(NSMutableArray *)diffs;`
`- (void)patch_splitMax:(NSMutableArray *)patches;`


`- (NSArray<Diff *> *)diff_cleanupSemantic:(NSArray<Diff *> *)diffs;`
`- (NSArray<Diff *> *)diff_cleanupSemanticLossless:(NSArray<Diff *>
`- (NSArray<Diff *> *)diff_cleanupEfficiency:(NSArray<Diff *> *)diffs;`
`- (NSArray<Diff *> *)diff_cleanupMerge:(NSArray<Diff *> *)diffs;`
`- (NSArray<Patch *> *)patch_splitMax:(NSArray<Patch *>

That is rather than manipulating an `NSMutableArray` parameter, the
methods return the changed array.

I hope that not only is the Swift interop beneficial, but a valuable
side-effect is an improved API - cleaning up the bad practice of
returning mutable collections from API methods.
@NickAger NickAger Parameter name change eb726bd
@NickAger NickAger Swift interop: Added _nullable anotations
Ensured that methods that can return nil are decorated with _nullable
anotations, so the Swift version maps correctly to an Optional
@NickAger NickAger Update DiffMatchPatch.podspec
removed version, so that we will load the latest version
@NickAger NickAger added .travis.yml and d80e0b3
@NickAger NickAger more info about a travis failing test aa6af9a
@NickAger NickAger updated travis to ignore cocoa pod warnings c54c6be
@NickAger NickAger be even more generous with timeout - timeout check too stringent on t…
@NickAger NickAger updated travis and 2171362
@NickAger NickAger be even more forgiving for travis 1ffaee5
@NickAger NickAger fixed broken badge 7b880e7
@NickAger NickAger removed failing travis test as it was timing dependant 2c1d5ac
@corinnekrych corinnekrych merged commit 2c1d5ac into aerogear:master Mar 18, 2016

@NickAger Landed!
Thank you for the excellent work 🌹

matzew commented Mar 18, 2016

thanks @NickAger 🌹


thanks for the flowers @corinnekrych & @matzew.

Note: one change I made that you might want to reverse was removing the version tag from the podspec:

s.source       = { :git => '',  :tag => '0.1.2'}

I removed :tag => '0.1.2' so my pod file would fetch the latest version from my fork. If you want to push an update to the cocoa pods repository (pod trunk push DiffMatchPatch.podspec) you'll need to make a new release e.g. 0.1.3 then re-add the version :tag => '0.1.3'

Apologies if this is blindingly obvious to you.


Yeap I'll do a release and preprare podspec for it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment