Pārlūkot izejas kodu

Merge pull request #216 from bizz84/feature/add-changelog

Add Changelog.
Andrea Bizzotto 8 gadi atpakaļ
vecāks
revīzija
22029cce8d
1 mainītis faili ar 147 papildinājumiem un 0 dzēšanām
  1. 147 0
      CHANGELOG.md

+ 147 - 0
CHANGELOG.md

@@ -0,0 +1,147 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+
+## [WIP] 0.10.1 Danger integration
+
+* Adds Danger for better Pull Request etiquette
+
+## [0.10.0](https://github.com/bizz84/SwiftyStoreKit/releases/tag/0.10.0) `verifyReceipt` now automatically refreshes the receipt if needed
+
+#### API removed: `refreshReceipt`
+
+This release simplifies the receipt verification flows by removing the `refreshReceipt` method from the public API.
+
+Now clients only need to call `verifyReceipt` and the receipt is refreshed internally if needed.
+
+Addressed in [#213](https://github.com/bizz84/SwiftyStoreKit/pull/213), related issue: [#42](https://github.com/bizz84/SwiftyStoreKit/issues/42).
+
+The documentation in the README and various methods has also been considerably improved.
+
+## [0.9.3](https://github.com/bizz84/SwiftyStoreKit/releases/tag/0.9.3) Dispatch callbacks on main thread on macOS
+
+This is a minor release to ensure callbacks are dispatched on the main thread on macOS.
+
+PR [#214](https://github.com/bizz84/SwiftyStoreKit/pull/214), fix for [#211](https://github.com/bizz84/SwiftyStoreKit/issues/211).
+
+## [0.9.2](https://github.com/bizz84/SwiftyStoreKit/releases/tag/0.9.2) Fix for failing receipt verification due to missing optional field
+
+This is a critical fix for [#208](https://github.com/bizz84/SwiftyStoreKit/issues/208).
+
+If you're using release 0.9.0, please update.
+
+## [0.9.1](https://github.com/bizz84/SwiftyStoreKit/releases/tag/0.9.1) Expose SKProduct in PurchaseDetails type returned by PurchaseResult
+
+This is a minor release which includes a fix for [#185](https://github.com/bizz84/SwiftyStoreKit/issues/185) (addressed in [#206](https://github.com/bizz84/SwiftyStoreKit/pull/206)). Summary:
+
+When a purchase succeeds, it is desirable to get access to the purchased `SKProduct` in the completion block, so that it's possible to query the `price` and other properties.
+
+With this change, this is now possible:
+
+```swift
+SwiftyStoreKit.purchaseProduct("productId", atomically: true) { result in
+    if case .success(let purchase) = result {
+        // Deliver content from server, then:
+        if purchase.needsFinishTransaction {
+            SwiftyStoreKit.finishTransaction(purchase.transaction)
+        }
+        print("Purchased product with price: \(purchase.product.price)")
+    }
+}
+```
+
+## [0.9.0](https://github.com/bizz84/SwiftyStoreKit/releases/edit/0.9.0) Verify Subscription improvements + added quantity and originalTransaction to Payment
+
+**NOTE** This release introduces some API breaking changes (see [#202](https://github.com/bizz84/SwiftyStoreKit/pull/202)). Change-set:
+
+### [#198](https://github.com/bizz84/SwiftyStoreKit/pull/198): Subscription verification unit tests
+
+### [#199](https://github.com/bizz84/SwiftyStoreKit/pull/199) (fixes [#192](https://github.com/bizz84/SwiftyStoreKit/issues/192), [#190](https://github.com/bizz84/SwiftyStoreKit/issues/190) and [#65](https://github.com/bizz84/SwiftyStoreKit/issues/65)): Add `ReceiptItem` to `VerifyPurchaseResult`, `VerifySubscriptionResult`
+
+This change introduces a new strong-typed `ReceiptItem` struct:
+
+```swift
+public struct ReceiptItem {
+    // The product identifier of the item that was purchased. This value corresponds to the productIdentifier property of the SKPayment object stored in the transaction’s payment property.
+    public let productId: String
+    // The number of items purchased. This value corresponds to the quantity property of the SKPayment object stored in the transaction’s payment property.
+    public let quantity: Int
+    // The transaction identifier of the item that was purchased. This value corresponds to the transaction’s transactionIdentifier property.
+    public let transactionId: String
+    // For a transaction that restores a previous transaction, the transaction identifier of the original transaction. Otherwise, identical to the transaction identifier. This value corresponds to the original transaction’s transactionIdentifier property. All receipts in a chain of renewals for an auto-renewable subscription have the same value for this field.
+    public let originalTransactionId: String
+    // The date and time that the item was purchased. This value corresponds to the transaction’s transactionDate property.
+    public let purchaseDate: Date
+    // For a transaction that restores a previous transaction, the date of the original transaction. This value corresponds to the original transaction’s transactionDate property. In an auto-renewable subscription receipt, this indicates the beginning of the subscription period, even if the subscription has been renewed.
+    public let originalPurchaseDate: Date
+    // The primary key for identifying subscription purchases.
+    public let webOrderLineItemId: String
+    // The expiration date for the subscription, expressed as the number of milliseconds since January 1, 1970, 00:00:00 GMT. This key is only present for auto-renewable subscription receipts.
+    public let subscriptionExpirationDate: Date?
+    // For a transaction that was canceled by Apple customer support, the time and date of the cancellation. Treat a canceled receipt the same as if no purchase had ever been made.
+    public let cancellationDate: Date?
+
+    public let isTrialPeriod: Bool
+}
+```
+
+This is parsed from the receipt and returned as part of the `verifySubscription` and `verifyPurchase` methods:
+
+```swift
+// Result for Consumable and NonConsumable
+public enum VerifyPurchaseResult {
+    case purchased(item: ReceiptItem)
+    case notPurchased
+}
+
+// Verify subscription result
+public enum VerifySubscriptionResult {
+    case purchased(expiryDate: Date, items: [ReceiptItem])
+    case expired(expiryDate: Date, items: [ReceiptItem])
+    case notPurchased
+}
+```
+
+Note that when one or more subscriptions are found for a given product id, they are returned as a `ReceiptItem` array ordered by `expiryDate`, with the first one being the newest.
+
+This is useful to get all the valid date ranges for a given subscription.
+
+### [#202](https://github.com/bizz84/SwiftyStoreKit/pull/202) (fix for [#200](https://github.com/bizz84/SwiftyStoreKit/issues/200)): It's now possible to specify the quantity when making a purchase. Quantity is also accessible in the callback.
+
+#### This is an API breaking change. `Product` has been renamed to `Purchase`:
+
+```swift
+public struct Purchase {
+    public let productId: String
+    public let quantity: Int
+    public let transaction: PaymentTransaction
+    public let needsFinishTransaction: Bool
+}
+```
+
+#### `PurchaseResult`
+
+```swift
+public enum PurchaseResult {
+    //case success(product: Product) // old
+    case success(purchase: Purchase) // new
+    case error(error: SKError)
+}
+```
+
+#### `RestoreResults`
+
+```swift
+public struct RestoreResults {
+    //public let restoredProducts: [Product] // old
+    //public let restoreFailedProducts: [(SKError, String?)] // old
+    public let restoredPurchases: [Purchase] // new
+    public let restoreFailedPurchases: [(SKError, String?)] // new
+}
+```
+
+### [#203](https://github.com/bizz84/SwiftyStoreKit/pull/203) (fix for [#193](https://github.com/bizz84/SwiftyStoreKit/issues/193)): Add `originalTransaction` from `SKPaymentTransaction.original` to `Payment` type
+
+
+
+## TODO: Older releases