Post

Replies

Boosts

Views

Activity

In App Settings
Hi, Something weird is going on with my code. I want it so when someone allows me to send notifications, if they go into my setting view controller to see that toggled on. Here is a link to my project: https://www.icloud.com/iclouddrive/0PDX_ZK3kyamqHjV8-hlDhZbw#Riddle_Wednesday Thanks in advance!
9
0
1.2k
Apr ’21
Widget Kit and UserDefaults
Hi, I keep getting the error "Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols" on lines 99 and 100, here is the code: import SwiftUI import Intents import UserNotifications class Riddles {     static var text = String()     static var isWednesday = Bool()     static func largeWidget() {         Riddles.checkWeekday()         let userDefaults = UserDefaults(suiteName: "group.SetRiddle")         if Riddles.isWednesday == false {             if userDefaults?.value(forKey: "currentRiddle") != nil || userDefaults?.value(forKey: "previousRiddle") != nil {                 Riddles.text = "\(UserDefaults(suiteName: "group.SetRiddle")?.value(forKey: "currentRiddle") as! String) \n\n\(UserDefaults(suiteName: "group.SetRiddle")?.value(forKey: "previousRiddle") as! String)"             }else{                 Riddles.text = "Please open app to display riddle"             }         }else {             Riddles.text = "Please open app to display riddle"         }     }     static func mediumWidget() {         Riddles.checkWeekday()         let userDefaults = UserDefaults(suiteName: "group.SetRiddle")         if Riddles.isWednesday == true {             if userDefaults?.value(forKey: "currentRiddle") != nil {                 Riddles.text = UserDefaults(suiteName: "group.SetRiddle")?.value(forKey: "currentRiddle") as! String             }else{                 Riddles.text = "Please open app to display riddle"             }         }else {             Riddles.text = "Please open app to display riddle"         }     }     static func checkWeekday() {         let today = Date()         let calendar = Calendar(identifier: .gregorian)         let components = calendar.dateComponents([.weekday], from: today)                  if components.weekday == 4 {             Riddles.isWednesday = true         }else {             Riddles.isWednesday = false         }              } } struct Provider: IntentTimelineProvider {     func placeholder(in context: Context) -> SimpleEntry {         SimpleEntry(date: Date(), text: "", configuration: ConfigurationIntent())     }     func getSnapshot(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (SimpleEntry) -> ()) {         let entry = SimpleEntry(date: Date(), text: "", configuration: configuration)         completion(entry)     }     func getTimeline(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {         var entries: [SimpleEntry] = []                  // Generate a timeline consisting of five entries an hour apart, starting from the current date.         let currentDate = Date()         for hourOffset in 0 ..< 5 {             let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)!             let entry = SimpleEntry(date: entryDate, text: "", configuration: configuration)             entries.append(entry)         }         let timeline = Timeline(entries: entries, policy: .atEnd)         completion(timeline)     } } struct SimpleEntry: TimelineEntry {     let date: Date     let text: String     let configuration: ConfigurationIntent } struct RiddleWidgetEntryView : View {     var entry: Provider.Entry          @Environment(\.widgetFamily) var family: WidgetFamily          @ViewBuilder     var body: some View {                  switch family {         case .systemMedium: Riddles.mediumWidget()         case .systemLarge: Riddles.largeWidget()         }         ZStack {                 Text(Riddles.text)                     .foregroundColor(.black)                     .font(Font.system(size: 20))         }     } } @main struct RiddleWidget: Widget {     let kind: String = "RiddleWidget"     var body: some WidgetConfiguration {         IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: Provider()) { entry in             RiddleWidgetEntryView(entry: entry)         }         .configurationDisplayName("My Widget")         .description("This is an example widget.")         .supportedFamilies([.systemMedium, .systemLarge])     } } struct RiddleWidget_Previews: PreviewProvider {     static var previews: some View {         RiddleWidgetEntryView(entry: SimpleEntry(date: Date(), text: "This Weeks Riddle: ", configuration: ConfigurationIntent()))             .previewContext(WidgetPreviewContext(family: .systemSmall))     } } Thanks in advance
0
0
925
Feb ’21
How do I pull some data from store kit
Hi, I have this code in a designated file called IAP Manager to handle all things related to in-app purchases. import StoreKit import Foundation final class IAPManager: NSObject, SKProductsRequestDelegate, SKPaymentTransactionObserver {     static let shared = IAPManager()     private var products = [SKProduct]()     private var productBeingPurchased: SKProduct?     enum Product: String, CaseIterable {         case removeAds = "JokesRUs.RemoveAds"     }     public func fetchProducts() {         let request = SKProductsRequest(productIdentifiers: Set(Product.allCases.compactMap(({ $0.rawValue }))))         request.delegate = self         request.start()     }     func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {         products = response.products     }     func request(_ request: SKRequest, didFailWithError error: Error) {         guard request is SKProductsRequest else {             return         }         print("Product fetch request failed")     }     public func purchase(product: Product) {         guard SKPaymentQueue.canMakePayments() else {             return         }         guard let storeKitProduct = products.first(where: { $0.productIdentifier == product.rawValue }) else {             return         }                  let paymentRequest = SKPayment(product: storeKitProduct)         SKPaymentQueue.default().add(self)         SKPaymentQueue.default().add(paymentRequest)              }     func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {         transactions.forEach({ transaction in             switch transaction.transactionState {             case .purchasing:                 //No op                 break             case .purchased:                 handlePurchase(transaction.payment.productIdentifier)                 break             case .failed:                 break             case .restored:                 break             case .deferred:                 break             @unknown default:                 break             }         }) }     private func handlePurchase(_ id: String) {         UserDefaults.standard.setValue(true, forKey: id)         print(id)     } } And then I have this code to call it: IAPManager.shared.purchase(product: .removeAds) The problem is I can't figure out how to get the price for the location from StoreKit. Thanks in advance!
0
0
682
Mar ’21
IAP Restore
Hi, In my app, I do all the validation locally and the documentation doesn't explain how to restore purchases when the app restores everything locally. Here is my code. Thank you for your time. Code - https://developer.apple.com/forums/content/attachment/f7000d1d-5901-4758-8b91-d4f2b3dc5a3f
0
0
615
May ’21