iOS TCF V2

Vous pouvez télécharger nos boites à outils AppConsentKit et AppConsentUIKit en suivant les liens ci-dessous:

XCFramework 1.2.12

Dernière révision: 03.05.2021

2 façons d'ajouter le SDK AppConsent à votre projet iOS :

Drag & Drop XCFramework

Suivez les étapes suivantes :

  • Dans l'onglet Général de votre application Target, Glisser / Déposer les XCFrameworks AppConsentKit.xcframework et le AppConsentUIKit.xcframework dans Frameworks, Libraires and Embedded Content. Faites sur les XCFrameworks sont Embed & Sign.

  • Compatibilité xCode 12 et au-dessus. Target de déploiement iOS 11 minimum.

Cocoapods

Vous pouvez maintenant installer le SDK AppConsent avec Cocoapods.

Dans votre fichier pod, ajoutez le pod suivant :

pod 'AppConsentKit', '~> 1.2.0'
pod 'AppConsentUIKit', '~> 1.2.0'

N'oubliez pas d'ajouter ces lignes en haut de votre podfile :

source 'https://github.com/CocoaPods/Specs.git'
source 'https://gitlab.datalf.chat/dev/appconsentios-private-pod.git'

Exécuter pod install dans votre ligne de commande.

Note : Vous devez avoir au moins la version 1.10.0 du pod pour que cela fonctionne correctement.

Vous trouverez un exemple ci-dessous :

Swift Package Manager

Vous pouvez également installer nos SDK via le gestionnaire de dépendance Swift Package Manager.

Note: Pour l'instant, vous devez installer tous les packages manuellement dû à quelques erreurs de compatibilité concernant les binaires XCFrameworks et les dépendances de Swift Package Manager.

AppConsentKit 1.2.2
https://gitlab.datalf.chat/customers/appconsentkit-spm.git
AppConsentUIKit
1.2.2
https://gitlab.datalf.chat/customers/appconsentuikit-spm.git
SwiftProtobuf
1.14.0
https://github.com/apple/swift-protobuf

Comment utiliser AppConsent

  1. Obtenez d'abord votre AppKey sur AppConsent.

  2. Vous devez importer le SDK dans votre code :import AppConsentUIKit

  3. Ensuite, vous pouvez créer et initialiser ACUIKit de cette manière :

let appconsent = ACUIKit(withAppKey: "YOUR_APP_KEY", forceApplyGDPR: true)

Important

AppConsent SDK est compatible avec le nouveau App Tracking Transparency framework (> iOS 14+ disponible).Vous devez enregistrer la clé NSUserTrackingUsageDescription dans votre Info.plist de votre application, sinon votre application plantera.

App Tracking Transparency

Apple a publié iOS 14.5 il y a quelques jours (26 avril 2021). L'un des principaux changements est la nouvelle fenêtre contextuelle du système appelée App Tracking Transparency (ATT).

L'App Tracking Transparency exige que les apps obtiennent la permission de l'utilisateur avant de suivre ses données sur des apps ou des sites web appartenant à d'autres entreprises à des fins publicitaires, ou de partager ses données avec des courtiers en données.

Les applications peuvent demander l'autorisation aux utilisateurs et, dans les paramètres, les utilisateurs pourront voir quelles applications ont demandé l'autorisation de suivre leurs données afin de pouvoir modifier leur choix à tout moment. Notre dernier framework (version 1.2.11 +) est entièrement compatible et intégré à notre plateforme de gestion de contenu.

Sur l'App Consent back-office, vous devez activer le switch use iOS Att et activer le switch disable success screen (pour les appareils sous iOS 14).

N'oubliez pas d'enregistrer la clé NSUserTrackingUsageDescription dans votre Info.plist de votre application sinon votre application se plantera. Note : Si vous n'avez pas mis à jour votre application avec le dernier Framework et si votre application fonctionne sur un appareil iOS 14.5, l'IDFA sera 00000-00000-00000-00000.

Floating Purpose - ATT

Sur le back-office de l'App Consent, vous devez créer un Extra-Purpose pour la fonctionnalité ATT.

Marche à suivre : Allez dans le menu des finalités supplémentaires à gauche, et cliquez sur Ajouter un Extra-purpose Entrez un nom, une description et sélectionnez Floating pour le type. Sauvegardez. Sur votre Notice, cliquez sur Modifier et dans la section Configuration, ajoutez votre nouvel Floating Extra Purpose for ATT. Sauvegardez.

Fonctionnalités de l'AppConsentUIKit

Vérifier si l'utilisateur a donné son consentement

appconsent.consentGiven()

Retourne true si le consentement est donné, false dans le cas contraire.

Présentez une notice

appconsent.presentNotice(force: true, viewController: self)

Pour afficher la CMP en mode modal depuis votre ViewController.

Méthode permettant d'avoir un retour une fois le consentement donnée

appconsent.consentGiven(success: {
print("Success - Consent Given")
}, failure: { error in
print("Error: \(error)")
})

Vérifier si l'utilisateur a donné son consentement à la géolocalisation

appconsent.geolocationConsentGiven()

Retourne true si le consentement est donné, false dans le cas contraire.

Méthode permettant d'avoir un retour une fois le consentement de géolocalisation donné

appconsent.geolocationConsentGiven(success: {
print("Success - Consent Given")
}, failure: { error in
print("Error: \(error)")
})

Consentement autorisé - objectId

appconsent.consentableAllowed(objectId: "1")

Retourne true si le consentement avec objectId = 1 est autorisé, false dans le cas contraire.

Consentement autorisé- iabId

appconsent.consentableAllowed(iabId: "1")

Retourne true si le consentement avec iabId = 1 est autorisé, false dans le cas contraire.

Consentement autorisé- extraId

appconsent.consentableAllowed(extraId: "1")

Retourne true si le consentement avec extraId = 1 est autorisé, false dans le cas contraire.

Stack autorisé

appconsent.stackAllowed(iabId: "1")

Retourne true si le stack aveciabId = 1est autorisé, false dans le cas contraire.

Vendor autorisé - iabId

appconsent.vendorAllowed(iabId: "1")

Retourne true si le vendor avec iabId = 1 est autorisé, false dans le cas contraire.

Vendor autorisé - extraId

appconsent.vendorAllowed(extraId: "1")

Retourne true si l'extra vendor avec extraId = 1 est autorisé, false dans le cas contraire.

appconsent.setConsentableConsents(values: ["1": .allowed], success: {
print("Success")
}, failure: { error in
print("Error: \(error)")
})

Définir le statut des consentements avec un iabId.

Attention Key doit être un iabId, et non un objectId.

Notez que cette méthode n'envoie pas de requête au serveur.

appconsent.setExtraConsentableConsents(values: ["aaa": .allowed], success: {
print("Success")
}, failure: { error in
print("Error: \(error)")
})

Définir le statut des consentables avec extraId.

Attention Key doit être un extraId, et non un objectId.

Notez que cette méthode n'envoie pas de requête au serveur.

Vérifier les mises à jour

appconsent.checkForUpdate({ value in
print("Success: \(value)")
}, failure: { error in
print("Error: \(error)")
})

Vérifier si le consentement doit être mis à jour (nouvelle version GVL, nouveaux consentements...)

Supprimer les consentements dans le cache

appconsent.clearConsent()

Clear consents sur NSUserDefaults, mais pas sur le serveur.

Définir les données externes

appconsent.setExternalData(shipData: ACShipData, success:, failure:)

Définissez les données externes avec le modèle ACShipData et envoyez-les au serveur.

Définir les externalIds

appconsent.setExternalIds(externalIds: [String: String])

Vous pouvez setExternalIds. En arrière-plan, les, externalIds sont stockées dans le cache de notre Framework. Si vous le souhaitez, vous pouvez les enregistrer sur notre serveur comme ceci :

appconsent
.setExternalIds(externalIds: [String: String])
.saveExternalIds { state, configuration in
print(state ?? "state nil")
print(configuration ?? "configuration nil")
} failure: { error in
print(error.localizedDescription)
}

Obtenir externalIds

appconsent.getExternalIds() ->[String, String]

Récupérez les externalIds définis précédemment.

Ouvrir les paramètres de l'application

appconsent.openAppSettings()

Ouvrez App Consent settings dans l'onglet général.

App Tracking est disponible

appconsent.appTrackingIsAvailable() ->Bool

Vérifiez si votre appareil prend en charge App Tracking Transparency.

App Tracking Authorization

appconsent.appTrackingAuthorizationGiven() ->ACATTAuthorizationGiven

Vérifiez si App Tracking Transparency a été donnée.

Demande de App Tracking

appconsent.appTrackingRequestAuthorization(_ completion: ((ACATTAuthorizationStatus)->Void)?)

Demande l'autorisation de l'utilisateur. Le popup ATT s'affiche.

Note : le processus d'affichage du popup ATT est automatiquement intégré dans AppConsentUIKit lorsque l'utilisateur enregistre son consentement.

Sauvegardez ATT floating purpose

appconsent.saveATTFloatingPurpose(with value: Bool, _ completion: ACResultVoidHandler?)

Enregistrez le choix ATT de l'utilisateur et envoyez-le à notre serveur.

Floating purpose autorisé

appconsent.floatingPurposeAllowed(extraId: String) ->Bool

Vérifiez si floating purpose est autorisé.

Note : Vous devez appeler la méthode checkForUpdate avant d'appeler cette méthode ci-dessus pour rester à jour.

Afficher ATT si nécessaire

appconsent.displayATTIfNeeded(_ completion: ((ACATTAuthorizationStatus)->Void)?)

Pour la migration des utilisateurs existants, vous devez appeler cette méthode pour afficher le popup ATT sans réafficher la CMP.

Remarque : le popup ATT ne s'affiche que si l'appareil de l'utilisateur supporte ATT, si l'utilisateur a donné son consentement, si purpose 1 est vraie et si ATT ne s'affiche pas encore.

ATTENTION Ensuite, vous devez appeler la nouvelle méthodesaveATTFloatingPurpose(with value: Bool, _completion: ACResultVoidHandler?) pour envoyer le choix de l'utilisateur sur notre serveur.

Delegate basic implementation

La présentation d'une notice peut également prendre en parametre un Delegate. Il s'agit d'un object (une classe) qui doit se conformer au protocole AppConsentDelegate . Voici les principales méthodes que vous devrez implémenter.

appconsent.delegate = self
// called when the consent has been given
func appConsentDidFinish() {
print("consent did finish")
}
// called in case of error
func appConsentDidFail(_ error: Error) {
print("consent did fail: \(error.localizedDescription)")
}
func appConsentWillAppear() { ... }
func appConsentDidAppear() { ... }
func appConsentWillDisappear() { ... }
func appConsentDidDisappear() { ... }

Changelog

AppConsent CMP by SFBX®SDK iOS

[1.2.12] 2021-05-04

Correction : checkForUpdate lorsque ATT est supporté, non donné, mais l'utilisateur RefuseAll. Renvoie maintenant false au lieu de true.

[1.2.11] 2021–04–20

  • Nouvelle méthode publique isGDPRCountry() ->Bool dans AppConsentUIKit.

  • Nouveau comportement derrière la scène de func presentNotice(force : Bool, viewController:UIViewController) avec forceApplyGDPR.

Maintenant quand forceApplyGDPR est false et use_ios_att de backoffice est true et ATTAuthorization est supporté et non donné sur le dispositif, nous allons afficher la page d'écran successScreenpage pour recueillir ATT Authorization seulement.

public func presentNotice(force: Bool, viewController: UIViewController) {
self.appConsentKit.present(
with: forceApplyGDPR, force: force) { (mode: ACPresentation, configuration: ACConfiguration?) in
switch mode {
case .displayCMPWithIntroduction:
self.presentNoticeIntroduction(viewController)
case .displayCMPWithoutIntroduction:
self.presentNoticeWithoutIntroduction(viewController)
case .displaySuccessScreen:
self.presentSuccessScreen(viewController, configuration)
case .displayNothing:
_print("AppConsent: Display Nothing. ForceApplyGDPR is false and maybe use_ios_att is false, ATT was already presented or not supported.")
break
}
}
}

[1.2.10] 2021–03–31

  • Nouvelles méthodes publiques getAllConsentables(by : status) ->[ACConsentable] ? et getAllExtraVendors(by : status) ->[ACVendor] ?

Note : Ces méthodes sont uniquement pour Swift.

[1.2.9] 2021–03–18

Nouvelle méthode appTrackingAuthorizationStatus() ->ACATTAuthorizationStatus. Mise à jour pour la méthode checkForUpdate. Maintenant, vérifiez aussi si use_ios_att:true de la configuration et si ATT est déjà présenté.

[1.2.8] 2021–03–05

Correction de la barre de navigation cachée.

[1.2.7] 2021–03–02

  • Ajustement de la mise en page sur la page de succès. La taille de l'image est maintenant de 260x260. Le titre est maintenant sur la barre de navigation. Il y a plus d'espace pour la description de l'en-tête et du pied de page

[1.2.6] 2021–02–25

  • Correction de la mise en page sur la page de succès.

[1.2.5] 2021–02–24

  • Supports pour l'iab 2.1. Les cookies sont affichés dans les détails des fournisseurs. Note : Vous devez enregistrer à nouveau la notice sur le back-office pour l'affichage des cookies.

[1.2.4] 2021–02–09

  • Ajout d'une nouvelle propriété use_ios_att. Vous pouvez maintenant outrepasser toute logique pour afficherATT depuis AppConsent. Si use_ios_att est true le comportement est le même que celui spécifié dans la documentation.

[1.2.3] 2021–02–04

  • Correction du paramètre IABTCF_gdprApplies manquant dans UserDefault.

  • Nouvelle méthode currentIdentifier() ->ACCurrentIdentifier pout obtenir l'identifiant et le type courant.

idfv xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

idfa xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

custom xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

  • SwiftProtobuf bump to 1.15.0

[1.2.2] 2021–01–28

  • Corrections de bugs

  • Support pour Swift Package Manager. Vous pouvez maintenant installer AppConsentKit, AppConsentUIKit via SPM. Consultez notre documentation pour en savoir plus.

[1.2.1] 2021–01–21

  • Pas de popup d'erreur en mode bannière. Le mode doit être automatiquement rejeté.

  • Corriger le comportement de l'écran de succès avec ATT à partir du mode bannière.

[1.2.0] 2021–01–20

  • Support pour App Tracking Transparency (iOS 14+)

  • ATTENTION Vous devez définir NSUserTrackingUsageDescription dans votre Info.plist sinon votre application va planter.

  • Nouveau javascript reducer v22

  • Nouvelle méthode openAppSettings.

  • Nouvelle méthodeappTrackingIsAvailable() ->Bool

  • Nouvelle méthode appTrackingAuthorizationGiven() ->ACATTAuthorizationGiven

  • Nouvelle méthodeappTrackingRequestAuthorization(_ completion: ((ACATTAuthorizationStatus)->Void)?)

Note : le processus d'affichage du popup ATT est automatiquement intégré dans AppConsentUIKit lorsque l'utilisateur enregistre son consentement.

  • Nouvelle méthode saveATTFloatingPurpose(with value: Bool, _ completion:ACResultVoidHandler?)

  • Nouvelle méthode floatingPurposeAllowed(extraId: String) ->Bool

Note : Vous devez appeler la méthode checkForUpdate avant d'appeler la méthode ci-dessus pour rester à jour.

  • Nouvelle méthode displayATTIfNeeded(_ completion: ((ACATTAuthorizationStatus)->Void)?)

Pour la migration des utilisateurs existants, vous devez appeler cette méthode pour afficher le popup ATT sans réafficher la CMP.

Note : le popup ATT ne s'affiche que si l'appareil de l'utilisateur supporte ATT, si l'utilisateur a donné son consentement,si purpose 1 istrue si ATT ne s'affiche pas encore.

ATTENTION Ensuite, vous devez appeler la nouvelle méthode saveATTFloatingPurpose(with value: Bool, _completion: ACResultVoidHandler?) pour envoyer le choix de l'utilisateur sur notre serveur.

Exemple:

appConsentUIKit.displayATTIfNeeded { status in
switch status {
case .notSupported:
_print("Not supported")
case .failure:
self.appConsentUIKit
.saveATTFloatingPurpose(with: false, nil)
case .success:
self.appConsentUIKit
.saveATTFloatingPurpose(with: true, nil)
}
}

[1.1.18] 2020-12-15

  • Support pour xCode 12.3.

    Notre SDK iOS est maintenant construit et distribué sous forme de XCFramework.

  • Vous devez changer l'initialisateur de classe (en raison d'un problème lors de la construction XCFramework)

    AppConsentKit a été renommé en ACKit

    AppConsentUIKit a été renommé en ACUIKit

    Vous pouvez (devez) supprimer la phase d'exécution du script en phase de construction qui supprime l'architecture du simulateur pour l'archivage et la publication sur l'App Store.

  • Correction decheckForUpdate lorsque l'utilisateur réinitialise son idfa

  • Nouvel appel http (save-external route) pour les saveExternalIds en service. Rien à changer.

[1.1.17] 2020-12-09

  • Nouveau javascript reducer v20

  • Upgrade deSwiftProtobuf vers la version 1.14.0

  • Support HTML pour Partner Link et Other Partners

    Nous gardons également le support Markdown

  • Améliorations

[1.1.16] 2020-11-26

  • Nouveau javascript reducer v19

  • Vous pouvez désormais sauvegarder externalIds sans avoir à présenter une nouvelle notice. La nouvelle méthode est appelée saveExternalIds (success:, failure:). Vous pouvez l'appeler avec une chaining method après l'appelsetExternalIds comme ceci:

appConsentUIKit .setExternalIds(externalIds: ["a": "b"]) .saveExternalIds { state, configuration in print(state ?? "state nil") print(configuration ?? "configuration nil") } failure: { error in print(error.localizedDescription) }

  • Supports au Google Additionnal Consent. La clé IABTCF_AddtlConsent est enregistrée sur UserDefault Voir : https://support.google.com/admanager/answer/9681920?hl=en pour plus d'nformations.

  • ATTENTION Mise à jour pour la méthode setConsentable .La clé pour Dictionary doit être un iabId au lieu d'un id

  • Nouvelle méthodesetExtraConsentable.La clé pour Dictionary doit être un extraId

  • Nouvelle methode consentableAllowed(extraId)

  • Nouvelle methode vendorAllowed(extraId)

[1.1.15] 2020-11-19

  • Envoyez externalIds pour sauvegarder la request

  • Update de la méthodesetExternalIds. (Le callback est supprimé) Note: setExternalIdsdoit être appelé avant l'appel presentNotice si vous voulez envoyer des externalIdsto au server

[1.1.14] 2020-11-12

  • Bouton d'information dans Vendor details

  • Amélioration de la modale de présentation sur iPad (PageSheet)

[1.1.13] 2020-11-10

  • Correction de la traduction

  • Correction extra-vendors. Maintenant, d'autres partenaires sont affichés

  • Permettre un "refine by partner" au lancement

[1.1.12] 2020-11-03

  • Bouton "Add back" pour fermer la CMP si le consentement est donné et la CMP présenté à partir des paramètres

[1.1.11] 2020-10-29

  • Afficher l'erreur dans la vue CMP au lieu de alertView et masquer le pied de page.

  • Nouvelle méthode setExtternalId

  • Suppression de externalId de l'initialisation du SDK

[1.1.10] 2020-10-27

  • Compatibilité avec Objective-C pour setExternalData

[1.1.9] 2020-10-22

  • Correction d'un bug sur le purpose count

[1.1.8] 2020-10-21

  • Nouveau composant de présentation des boutons dans l'introduction avec les supports “I understand”

  • Correction de la traduction

[1.1.7] 2020-10-20

  • setExternalIds

  • Correction UI

  • ajout des traductions manquantes

[1.1.6] 2020-10-15

  • setExternalData

[1.1.5] 2020-10-13

  • Améliorations

  • Fixer les couleurs

[1.1.4] 2020-10-12

  • Compatibilité avec Objective-C

[1.1.3] 2020-10-08

  • Correctif pour la couleur des boutons

[1.1.2] 2020-10-08

  • Améliorations

[1.1.1] 2020-10-06

Correction

  • Cacher show more sur l'introduction quand "show more text" est vide

  • Vous pouvez maintenant revenir en arrière lorsque les utilisateurs cliquent sur partners dans l'introduction

Sortie

  • Améliorations

  • Reducer v16 (javascript)

[1.1.0] 2020-09-30

Correction

  • Traduction

Sortie

  • La nouvelle méthode consentableAllowed(:objectId) pour vérifier une finalité supplémentaire est autorisée par exemple

  • Consentement donné callback est maintenant appelé à l'introduction si l'utilisateur clique surAccept All

[1.0.9] 2020-09-29

Correction

  • Traduction

Sortie

  • Support pour extra-purpose

[1.0.8] 2020-09-23

Correction

  • bug du bitcode pour la validation des archives

[1.0.7] 2020-09-17

Unreleased

  • Fix switch UI bug iOS 14 (IPAD)

Correction

  • supprimer la barre de navigation pour la page d'introduction

  • suppression ACState logs

[1.0.6] 2020-09-15

  • Fix onboardingImage (Aspect Fit, height: 80px, width: frame.view.width)

  • Suppression du copyright sur la première page

  • Correction du lien markdown sur le label "More description" (première page)

[1.0.5] 2020-09-14

  • Correction des couleurs

  • Correction des liens de redirection en markdown

  • Correction de l'image à distance pour Onboarding - onboardingImage

  • Ajout mixe stacks

  • Ajout copyright dans footer

  • Ajout image distante dans la page d'accueil - icon

  • Ajout des couleurs à la page de succès

  • Ajout couleur de séparation

[1.0.4] 2020-09-09

Ajouté

  • Configuration Remote pour les couleurs

  • Désactiver la configuration "success screen"

  • Purposes behind a stack

  • Texte par défaut en markdown dans AppConsent

  • 11.2 release

  • 11.6+ release

Correction

  • Correction UI

[1.0.2] 2020-09-07

Ajouté

  • bitcode compilation compatibility

  • 11.2 release

  • 11.6+ release

Correction

  • La vue est présente de façon modale, et non en plein écran

  • Bouton “Accept All ” ne fonctionne pas

  • La méthode getExternalData() est déclarée comme une fonction nulle qui ne renvoie aucune valeur

  • Bouton “Voir les finalites oblihatorie (2)” ne fonctionne pas

  • Le callback getConsentableConsents() ne rappelle aucun call back ni succès ni erreur, et après cette méthode pour vérifier que consentable retourn false

  • [SFBX library] Lorsque le consentement est ouvert : il y a des problèmes UI dans les logs. Et certains des boutons, des liens ne fonctionnent pas

  • [SFBX library] Chaque fois que la méthode consentGiven method retourne false

  • [iOS][SFBX] Library delegate “AppConsentDelegate” n'appelle pas les méthodes lifecycle

Supprimé

  • getExternalData

Sommaire
XCFramework 1.2.12
Drag & Drop XCFramework
Cocoapods
Swift Package Manager
Comment utiliser AppConsent
App Tracking Transparency
Floating Purpose - ATT
Fonctionnalités de l'AppConsentUIKit
Vérifier si l'utilisateur a donné son consentement
Présentez une notice
Méthode permettant d'avoir un retour une fois le consentement donnée
Vérifier si l'utilisateur a donné son consentement à la géolocalisation
Méthode permettant d'avoir un retour une fois le consentement de géolocalisation donné
Consentement autorisé - objectId
Consentement autorisé- iabId
Consentement autorisé- extraId
Stack autorisé
Vendor autorisé - iabId
Vendor autorisé - extraId
Définir le consentable consent
Mettre en place un extra consentable consent
Vérifier les mises à jour
Supprimer les consentements dans le cache
Définir les données externes
Définir les externalIds
Obtenir externalIds
Ouvrir les paramètres de l'application
App Tracking est disponible
App Tracking Authorization
Demande de App Tracking
Sauvegardez ATT floating purpose
Floating purpose autorisé
Afficher ATT si nécessaire
Delegate basic implementation
Changelog
[1.2.12] 2021-05-04
[1.2.11] 2021–04–20
[1.2.10] 2021–03–31
[1.2.9] 2021–03–18
[1.2.8] 2021–03–05
[1.2.7] 2021–03–02
[1.2.6] 2021–02–25
[1.2.5] 2021–02–24
[1.2.4] 2021–02–09
[1.2.3] 2021–02–04
[1.2.2] 2021–01–28
[1.2.1] 2021–01–21
[1.2.0] 2021–01–20
[1.1.18] 2020-12-15
[1.1.17] 2020-12-09
[1.1.16] 2020-11-26
[1.1.15] 2020-11-19
[1.1.14] 2020-11-12
[1.1.13] 2020-11-10
[1.1.12] 2020-11-03
[1.1.11] 2020-10-29
[1.1.10] 2020-10-27
[1.1.9] 2020-10-22
[1.1.8] 2020-10-21
[1.1.7] 2020-10-20
[1.1.6] 2020-10-15
[1.1.5] 2020-10-13
[1.1.4] 2020-10-12
[1.1.3] 2020-10-08
[1.1.2] 2020-10-08
[1.1.1] 2020-10-06
[1.1.0] 2020-09-30
[1.0.9] 2020-09-29
[1.0.8] 2020-09-23
[1.0.7] 2020-09-17
[1.0.6] 2020-09-15
[1.0.5] 2020-09-14
[1.0.4] 2020-09-09
[1.0.2] 2020-09-07