You might see that the Dropbox Community team have been busy working on some major updates to the Community itself! So, here is some info on what’s changed, what’s staying the same and what you can expect from the Dropbox Community overall.

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)
                }
            }
        }
    }