Skip to content

Instantly share code, notes, and snippets.

@ajjames
Last active August 29, 2015 14:13
Show Gist options
  • Save ajjames/f6ef48bcde3d47e75117 to your computer and use it in GitHub Desktop.
Save ajjames/f6ef48bcde3d47e75117 to your computer and use it in GitHub Desktop.
UpgradeHelper
//Objective-c
//HEADER
#import <Foundation/Foundation.h>
@interface UpgradeHelper : NSObject
+(BOOL)isUpgradeAvailable:(NSString*)localVersion releasedVersion:(NSString*)releasedVersion;
@end
//IMPLEMENTATION
#import "UpgradeHelper.h"
@implementation UpgradeHelper
+(BOOL)UpgradeAvailable:(NSString*)localVersion releasedVersion:(NSString*)releasedVersion
{
NSArray *localVersionArray = [localVersion componentsSeparatedByString:@"."];
NSArray *releasedVersionArray = [releasedVersion componentsSeparatedByString:@"."];
int count = fmax(localVersionArray.count, releasedVersionArray.count);
NSString *localVersionString = @"";
NSString *releasedVersionString = @"";
for (int index = 0; index < count; index++)
{
NSString *localDigitString = (index < localVersionArray.count) ? localVersionArray[index] : @"000";
NSString *releasedDigitString = (index < releasedVersionArray.count) ? releasedVersionArray[index] : @"000";
localVersionString = [localVersionString stringByAppendingString:[UpgradeHelper createThreeDigitStringWithSignificantZeros:localDigitString]];
releasedVersionString = [releasedVersionString stringByAppendingString:[UpgradeHelper createThreeDigitStringWithSignificantZeros:releasedDigitString]];
}
NSInteger localVersionInt = [localVersionString integerValue];
NSInteger releasedVersionInt = [releasedVersionString integerValue];
return localVersionInt < releasedVersionInt;
}
+(NSString*)createThreeDigitStringWithSignificantZeros:(NSString*)string;
{
NSString *newString = [string mutableCopy];
NSUInteger count = newString.length;
while (count < 3)
{
newString = [[@"0" stringByAppendingString:newString] mutableCopy];
count = newString.length;
}
return [newString copy];
}
@end
//Swift
import UIKit
@objc public class UpgradeHelper
{
public class func isUpgradeAvailable(#localVersion:String, releasedVersion:String) -> Bool
{
var localVersionArray = localVersion.componentsSeparatedByString(".")
var releasedVersionArray = releasedVersion.componentsSeparatedByString(".")
let count = max(localVersionArray.count, releasedVersionArray.count)
var localVersionString = ""
var releasedVersionString = ""
for index in 0..<count
{
var localDigitString:String = (index < localVersionArray.count) ? localVersionArray[index] : "000"
var releasedDigitString:String = (index < releasedVersionArray.count) ? releasedVersionArray[index] : "000"
localVersionString += createThreeDigitStringWithSignificantZeros(localDigitString)
releasedVersionString += createThreeDigitStringWithSignificantZeros(releasedDigitString)
}
let localVersionInt = localVersionString.toInt() ?? 0
let releasedVersionInt = releasedVersionString.toInt() ?? 0
return localVersionInt < releasedVersionInt
}
private class func createThreeDigitStringWithSignificantZeros(string:String) -> String
{
var newString = string
var count = countElements(newString)
while (count < 3)
{
newString = "0" + newString
count = countElements(newString)
}
return newString
}
}
//For playgroud:
"TRUE"
UpgradeHelper.isUpgradeAvailable(localVersion: "99.88.77", releasedVersion: "100.100.100")
UpgradeHelper.isUpgradeAvailable(localVersion: "1.6.0", releasedVersion: "1.6.1")
UpgradeHelper.isUpgradeAvailable(localVersion: "1.6.1", releasedVersion: "2.0.5")
UpgradeHelper.isUpgradeAvailable(localVersion: "1.5", releasedVersion: "1.5.1")
UpgradeHelper.isUpgradeAvailable(localVersion: "1.5.0", releasedVersion: "1.5.1")
UpgradeHelper.isUpgradeAvailable(localVersion: "1.6.1", releasedVersion: "1.7")
UpgradeHelper.isUpgradeAvailable(localVersion: "1.6.1", releasedVersion: "1.7.0")
UpgradeHelper.isUpgradeAvailable(localVersion: "1.6.1", releasedVersion: "1.6.1.1")
UpgradeHelper.isUpgradeAvailable(localVersion: "1.6.1.0", releasedVersion: "1.6.1.1")
UpgradeHelper.isUpgradeAvailable(localVersion: "1.5", releasedVersion: "1.6.1.1")
UpgradeHelper.isUpgradeAvailable(localVersion: "1.5.0.0", releasedVersion: "1.6.1.1")
"FALSE"
UpgradeHelper.isUpgradeAvailable(localVersion: "1.6.1", releasedVersion: "1.6.0")
UpgradeHelper.isUpgradeAvailable(localVersion: "1.6.0", releasedVersion: "1.5.9")
UpgradeHelper.isUpgradeAvailable(localVersion: "1.6", releasedVersion: "1.5.9")
UpgradeHelper.isUpgradeAvailable(localVersion: "1.6.1.1", releasedVersion: "1.6.1")
UpgradeHelper.isUpgradeAvailable(localVersion: "1.6.1.1", releasedVersion: "1.6.1.0")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment