We are aware of the issue with the badge emails resending to everyone, we apologise for the inconvenience - learn more here.

Forum Discussion

Michael-jamf's avatar
Michael-jamf
Helpful | Level 6
2 years ago

When using upload/uploadsession I get a sessionDeinitialized from alamofire in Swift

When I try to send a test file using either upload or uploadSession I get a sessionDeinitialized error. I edit the code to generate a file that is larger or smaller than the chunksize to test both o...
  • Michael-jamf's avatar
    Michael-jamf
    2 years ago

    Okay managed to get it working with the examples that Dropbox has on their github. With no duplicate views. I think that was something on my end where the app wasnt actually closed or something.

    This is for MacOS. If you want to use iOS I would recommend looking here. It worked out of the box for iOS.

    ContentView.swift

     

    import SwiftUI
    import SwiftyDropbox
    import AppKit
    
    struct ContentView: View {
    
        func myButtonInControllerPressed() {
            // OAuth 2 code flow with PKCE that grants a short-lived token with scopes, and performs refreshes of the token automatically.
            let scopeRequest = ScopeRequest(scopeType: .user, scopes: ["account_info.read"], includeGrantedScopes: false)
            DropboxClientsManager.authorizeFromControllerV2(
                sharedApplication: NSApplication.shared,
                controller: nil,
                loadingStatusDelegate: nil,
                openURL: {(url: URL) -> Void in NSWorkspace.shared.open(url)},
                scopeRequest: scopeRequest
            )
        }
        
        var body: some View {
            VStack {
                Button {
                    myButtonInControllerPressed()
                } label: {
                    Text("Test Dropbox Auth")
                }
            }.frame(maxWidth: .infinity, maxHeight: .infinity)
    
        }
    }
    
    struct ContentView_Previews: PreviewProvider {
        static var previews: some View {
            ContentView()
        }
    }

     

    YOURAPPNAMEapp.swift

     

    import SwiftUI
    import SwiftyDropbox
    
    @main
    struct dropboxClientApp: App {
        
        @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
        
        var body: some Scene {
            WindowGroup {
                ContentView()
            }
        }
    }
    
    class AppDelegate: NSObject, NSApplicationDelegate {
        func applicationDidFinishLaunching(_ aNotification: Notification) {
            DropboxClientsManager.setupWithAppKeyDesktop("app-key")
            NSAppleEventManager.shared().setEventHandler(self,
                                                             andSelector: #selector(handleGetURLEvent),
                                                             forEventClass: AEEventClass(kInternetEventClass),
                                                             andEventID: AEEventID(kAEGetURL))
        }
        
        @objc
        func handleGetURLEvent(_ event: NSAppleEventDescriptor?, replyEvent: NSAppleEventDescriptor?) {
            if let aeEventDescriptor = event?.paramDescriptor(forKeyword: AEKeyword(keyDirectObject)) {
                if let urlStr = aeEventDescriptor.stringValue {
                    let url = URL(string: urlStr)!
                    let oauthCompletion: DropboxOAuthCompletion = {
                        if let authResult = $0 {
                            switch authResult {
                            case .success:
                                print("Success! User is logged into Dropbox.")
                            case .cancel:
                                print("Authorization flow was manually canceled by user!")
                            case .error(_, let description):
                                print("Error: \(String(describing: description))")
                            }
                        }
                    }
                    DropboxClientsManager.handleRedirectURL(url, completion: oauthCompletion)
                    // this brings your application back the foreground on redirect
                    NSApp.activate(ignoringOtherApps: true)
                }
            }
        }
    }