anchor.diff:  
       if (app.platform.toUpperCase() == 'IOS'){
         downloadInfo.installUrl = '$baseArtifactPath/ios_plist?token=$dwToken';
  -      downloadInfo.installUrl = "itms-services://?action=download-manifest&url=${downloadInfo.installUrl}";
  +      downloadInfo.installUrl = "itms-services://?action=download-manifest&url=${Uri.encodeComponent(downloadInfo.installUrl)}";
       }else {
         downloadInfo.installUrl = downloadInfo.directLinkUrl;
       }
  
positive.code:         throw new RpcError(401,"ARTIFACT_ERROR","Access expired");
        }
        DateTime now = new DateTime.now();
        DateTime validity = new DateTime.fromMillisecondsSinceEpoch(tokenInfo["v"]);
        if (now.isAfter(validity)){
          throw new RpcError(401,"ARTIFACT_ERROR","Access expired");
        }
  
negative.code:     now = now.add(new Duration(minutes: 3));
      final token = {
        'id':idArtifact,
        'expireAt': now.millisecondsSinceEpoch
      };
      var dwToken = cache.instance.addValue(token);
  
  