NSComparisonResult MSACCompareCurrentReleaseWithRelease()

in AppCenterDistribute/AppCenterDistribute/MSACDistributeUtil.m [67:106]


NSComparisonResult MSACCompareCurrentReleaseWithRelease(MSACReleaseDetails *releaseB) {
  NSComparisonResult result = NSOrderedSame;
  MSACSemVer *shortVersionA = [MSACSemVer semVerWithString:[MSAC_APP_MAIN_BUNDLE infoDictionary][@"CFBundleShortVersionString"]];
  MSACSemVer *shortVersionB = [MSACSemVer semVerWithString:releaseB.shortVersion];
  NSString *packageHashA = MSACPackageHash();

  // Compare.
  if (!shortVersionA) {

    // None is using semantic versioning format, compare UUIDs.
    if (!shortVersionB) {
      if (![releaseB.packageHashes containsObject:packageHashA]) {
        return NSOrderedAscending;
      }
    } else {

      // Only version B is semantic versioning.
      return NSOrderedAscending;
    }
  } else if (!shortVersionB) {

    // Only version A is semantic versioning.
    return NSOrderedDescending;
  } else {

    // Compare using semantic versioning.
    result = [shortVersionA compare:shortVersionB];

    // Same, use version field as numeric values for comparison.
    if (result == NSOrderedSame) {
      result = [(NSString *)[MSAC_APP_MAIN_BUNDLE infoDictionary][@"CFBundleVersion"] compare:releaseB.version options:NSNumericSearch];
    }

    // Still same, compare UUIDs.
    if (result == NSOrderedSame && ![releaseB.packageHashes containsObject:packageHashA]) {
      return NSOrderedAscending;
    }
  }
  return result;
}