Client library for accessing Azure Storage on an iOS device

Overview

Azure Storage Client Library for iOS

Overview

This library is designed to help you build iOS applications that use Microsoft Azure Storage. At the moment, the library is in a preview stage, so thank you for taking a look! It will be some time before the library is stable. In the meantime, we would like to get as much input as possible from the community. Please let us know of any issues you encounter by opening an issue on Github.

The library currently supports almost all blob operations (some exceptions noted below.) Other services (table, queue, file) are forthcoming, depending on demand.

To use this library, you need the following:

  • iOS 8+
  • Xcode 7+

How to get started

The recommended way to use the library is through a Cocoapod, available here. Reference documention is available here.

Podfile

platform :ios, '8.0'

target 'TargetName' do
  pod 'AZSClient'
end

Framework

The other way to use the library is to build the framework manually:

  1. First, download or clone the azure-storage-ios repo.
  2. Go into azure-storage-ios -> Lib -> Azure Storage Client Library, and open AZSClient.xcodeproj in Xcode.
  3. At the top-left of Xcode, change the active scheme from "Azure Storage Client Library" to "Framework".
  4. Build the project (⌘+B). This will create an AZSClient.framework file on your Desktop.

You can then import the framework file into your application by doing the following:

  1. Create a new project or open up your existing project in Xcode.
  2. Drag and drop the AZSClient.framework into your Xcode project navigator.
  3. Select Copy items if needed, and click on Finish.
  4. Click on your project in the left-hand navigation and click the General tab at the top of the project editor.
  5. Under the Linked Frameworks and Libraries section, click the Add button (+).
  6. In the list of libraries already provided, search for libxml2.2.tbd and add it to your project.

Import statement

#import <AZSClient/AZSClient.h>

If you are using Swift, you will need to create a bridging header and import <AZSClient/AZSClient.h> there:

  1. Create a header file Bridging-Header.h, and add the above import statement.
  2. Go to the Build Settings tab, and search for Objective-C Bridging Header.
  3. Double-click on the field of Objective-C Bridging Header and add the path to your header file: ProjectName/Bridging-Header.h
  4. Build the project (⌘+B) to verify that the bridging header was picked up by Xcode.
  5. Start using the library directly in any Swift file, there is no need for import statements.

Here is a small code sample that creates and deletes a blob:

-(void)createAndDeleteBlob
{
    // Create a semaphore to prevent the method from exiting before all of the async operations finish.
    // In most real applications, you wouldn't do this, it makes this whole series of operations synchronous.
    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
    
    // Create a storage account object from a connection string.
    AZSCloudStorageAccount *account = [AZSCloudStorageAccount accountFromConnectionString:@"myConnectionString"];
    
    // Create a blob service client object.
    AZSCloudBlobClient *blobClient = [account getBlobClient];
    
    // Create a local container object with a unique name.
    NSString *containerName = [[NSString stringWithFormat:@"sampleioscontainer%@",[[[NSUUID UUID] UUIDString] stringByReplacingOccurrencesOfString:@"-" withString:@""]] lowercaseString];
    AZSCloudBlobContainer *blobContainer = [blobClient containerReferenceFromName:containerName];
    
    // Create the container on the service and check to see if there was an error.
    [blobContainer createContainerWithCompletionHandler:^(NSError* error){
        if (error != nil){
            NSLog(@"Error in creating container.");
        }
        
        // Create a local blob object
        AZSCloudBlockBlob *blockBlob = [blobContainer blockBlobReferenceFromName:@"blockBlob"];
        
        // Get some sample text for the blob
        NSString *blobText = @"Sample blob text";
        
        // Upload the text to the blob.
        [blockBlob uploadFromText:blobText completionHandler:^(NSError *error) {
            if (error != nil){
                NSLog(@"Error in uploading blob.");
            }
            
            // Download the blob's contents to a new text string.
            [blockBlob downloadToTextWithCompletionHandler:^(NSError *error, NSString *resultText) {
                if (error != nil){
                    NSLog(@"Error in downloading blob.");
                }
                
                // Validate that the uploaded/downloaded string is correct.
                if (![blobText isEqualToString:resultText])
                {
                    NSLog(@"Error - the text in the blob does not match.");
                }
                
                // Delete the container from the service.
                [blobContainer deleteContainerWithCompletionHandler:^(NSError* error){
                    if (error != nil){
                        NSLog(@"Error in deleting container.");
                    }
                    
                    dispatch_semaphore_signal(semaphore);
                }];
            }];
        }];
    }];
    
    // Pause the method until the above operations complete.
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
}

In general, all methods in the Storage Client that make service calls are asynchronous, roughly in the style of NSURLSession. When you call methods on the Storage Client that interact with the Storage Service, you need to pass in a completion handler block to handle the results of the operation. Service calls will return before the operation is complete.

More detailed examples can be found in the test code; better samples are coming soon. Also coming soon: API docs, a getting-started guide, and a downloadable framework file. This page will be updated with the relevant links when they're available.

Functionality

  • Create/List/Delete/Lease Containers.
  • Create/List/Read/Update/Delete/Lease/StartAsyncCopy Blobs.
    • Read/Write from/to Blobs with an NSStream, NSString, NSData, or local file.
    • Operations for specific blob types (block operations for block blobs, etc.)
  • Container and Blob properties and metadata.
  • Get/Set Service Properties (properties for Storage Analytics and CORS rules).
  • Blob virtual directories.
  • Use Shared Key authentication or SAS authentication.
  • Access conditions, automatic retries and retry policies, and logging.

Missing functionality

The following functionality is all coming soon:

  • If you want to download a blob's contents to a stream, this is possible using the DownloadToStream method on AZSCloudBlob. However, it is not yet possible to open an input stream that reads directly from the blob.
  • There are a number of internal details that will change in the upcoming releases. If you look at the internals of the library (or fork it), be prepared. Much of this will be clean-up related.

Specific areas we would like feedback on:

  • NSOperation support. We have had requests to use NSOperation as the primary method of using the library - methods such as 'UploadFromText' would return an NSOperation, that could then be scheduled in an operation queue. However, this approach seems to have several drawbacks, notably along the lines of error handling and data return. (For example, imagine trying to implement a 'CreateIfNotExists' method, using 'Exists' and 'Create'. If they both returned an NSOperation, you could have the 'Create' operation depend on the 'Exists' operation, but the 'Create' operation would need to behave differently in the case that 'Exists' returns an error, or that the resource already exists.) If you have suggestions, please discuss in the wiki, or open an issue.
  • The Azure Storage client currently uses NSURLSession behind the scenes to perform the HTTP requests. Currently, the client does not expose the delegate queue or various session configuration options to users, other than what will be exposed in the RequestOptions object. Is this something you would like to have control over?

Logging

If you are having problems with the library, turning on logging may help. Some notes:

  • All logging is done through the AZSOperationContext. You can either set a global logger (static on the AZSOperationContext class), and/or set a logger on a per-AZSOperationContext basis (both the global and instance loggers will be logged to, if available.) The library supports ASL logging by default, just pass an aslclient into either setGlobalLogger: or setLogger:withCondition:. You can also define your own logging function, with setLogFunction: and setGlobalLogFunction:. This will call into the input block, allowing you to log however you like.
  • Note that the library is multi-threaded. If you use the global ASL logger, this is handled properly for you by the library. If you use setLogger:withCondition:, the library will lock on the input condition before logging to the given logger. It's important to associate loggers with the correct NSCondition objects when setting them, otherwise the single-threaded requirement of the aslclient will not be met. If you pass in your own logging function(s), you should expect that they will be called in a multithreaded context, and you will need to take care of any required locking yourself.
  • You will need to set a minimum log level on either the global or instance logger. AZSLogLevelInfo should be sufficient for almost every scenario. (It will log all REST calls that the library makes, as well as details about signing.) Note that the library does not hide any authentication info, so your logs may contain sensitive data. This makes any potential problems easier to diagnose.

Internals

If you would like to look at the internals of the library, please do, but be aware that we will be iterating over the next several releases, drastic changes may occur. If you would like to run the tests, you will need to provide your own credentials in the test_configurations.json file. You will also have to change the scheme to actually build and run the tests, and you may need to enable code signing as well.

Comments
  • Xcode 8, swift 3- redefinition of module 'asl'

    Xcode 8, swift 3- redefinition of module 'asl'

    Hi, I have been using AZSClient for a while, but got into a shitstorm of errors when using xcode 8 and swift 3. And once again it seems that asl is at the centre of the issue. Reproduce by simply downloading xcode 8 gm and start a new project, then import AZSClient through cocoapods.

    bug 
    opened by Ruthberg 25
  • Apps crashes every now and then due to this line of code. Am i the only one experiencing this?

    Apps crashes every now and then due to this line of code. Am i the only one experiencing this?

    Hi, I receive irregular crashes whilst downloading blobs from the storage and here is the error i get --> https://puu.sh/y7DPX/04d3f2057b.png

    Maybe its me or i'm doing something wrong

    bug 
    opened by IfyNdu 16
  • com.Microsoft.AzureStorage.ErrorDomain error 3

    com.Microsoft.AzureStorage.ErrorDomain error 3

    I get this error quite often: The operation couldn’t be completed. (com.Microsoft.AzureStorage.ErrorDomain error 3.)

    I'm using blobstorage with SAS, and the only thing I can do once I get this error seems to be to get a new SASURI and try again. Why does this happen, and is there anything I can do to avoid these?

    Adding some code here for context:

    ` let url = URL(string: doc.resourceUri!) let storageUri = AZSStorageUri(primaryUri: url!) var error:NSError? let blob = AZSCloudBlockBlob(storageUri: storageUri, error: &error)

        blob.upload(from: data, completionHandler: { (error:Error?) -> Void in
            if error != nil && error?.localizedDescription != nil
            {
                let failureDescription = error?.localizedDescription
                doc.uploadStatus = UploadStatus.default.rawValue as NSNumber?
                doc.resourceUri = nil
                appdelegate.saveContext()
                self.blobCheckInProgress = false
                return
            }
            else
            {
                doc.uploadStatus = UploadStatus.uploaded.rawValue as NSNumber?
                doc.expense?.syncronized = NSNumber(value : false)
                doc.travelExpenseEntry?.syncronized = NSNumber(value : false)
                doc.travelExpenseEntry?.travelExpense?.syncronized = NSNumber(value : false)
                
                if StaticOperations.stringIsNilOrEmpty(input: doc.temporaryId)
                {
                    doc.temporaryId = UUID().uuidString
                }
            }
            
            appdelegate.saveContext()
            self.blobCheckInProgress = false
            self.checkForBlobsToUpload()
        })`
    
    opened by Ruthberg 8
  • Feedback Request: 3-min survey for Azure Storage Client Libraries and Tools

    Feedback Request: 3-min survey for Azure Storage Client Libraries and Tools

    Hi Everyone,

    This is your chance to shape the Azure Storage product roadmap! We are looking for feedback from our users regarding Azure Storage Client Library and Tools. If you'd like to help us, please take the following short survey: http://aka.ms/ClientLibrariesFeedback2016

    Sercan Guler Program Manager, Azure Storage

    opened by seguler 6
  • Failed to compile from source

    Failed to compile from source

    I am trying to follow the steps from the README:

    • clone the master branch
    • open the xcode project
    • compile the AZSClient library
    • compile the framework target: at this poing I get a strange "xcrun: error: Unknown build action 'xcodebuild'."

    I am using the latest XCode 8.1 on MacOS Sierra.

    opened by epot 4
  • +[AZSCloudStorageAccount accountFromConnectionString:error:]: unrecognized selector sent to class

    +[AZSCloudStorageAccount accountFromConnectionString:error:]: unrecognized selector sent to class

    I just updated to whatever the latest version is via cocoapods and I'm getting this error when trying to instantiate an AZSCloudStorageAccount object via swift:

    ex: let account = try! AZSCloudStorageAccount(fromConnectionString: "DefaultEndpointsProtocol=https;AccountName=\(accountName!);AccountKey=\(accountKey!)")

    this worked fine before the update minus the try! since the call now throws.

    opened by vtcajones 4
  • Can't build with bitcode

    Can't build with bitcode

    I'm trying to use this with a much larger project, but linker complains that I have to compile with bitcode, as the larger project uses bitcode. Even when I change the build settings to compile using bitcode, it still doesn't work. Anyone else have this problem? Due to the size of the project I simply cannot submit without bitcode.

    opened by Ruthberg 4
  • Include of non modular header

    Include of non modular header

    I am trying to use the library via cocoa pods,

    pod 'AZSClient'

    ran pod install and everything went well

    but when I try to use it in the project

    import AZSClient

    Project doesn't build

    screen shot 2016-02-11 at 5 12 31 pm

    I am using in a swift project

    Any help much appreciated

    bug 
    opened by vineethvijayan 4
  • Update required for Framework Instructions for Xcode 10

    Update required for Framework Instructions for Xcode 10

    The following error was encountered when attempting to build the framework perf steps 3-4 under the Framework section of your instructions:

    accessing build database "/Users/Library/Developer/Xcode/DerivedData/AZSClient-gfrzeddjhopquhfbkygxmchevldt/Build/Intermediates.noindex/XCBuildData/build.db": database is locked Possibly there are two concurrent builds running in the same filesystem location.

    To resolve this, the following steps should be added between Steps 3 and 4 of the Manual Framework instructions for Xcode 10+ users (or the script should be fixed): 3. (pre-existing) At the top-left of Xcode, change the active scheme from "Azure Storage Client Library" to "Framework". 4. Select the framework Target => Mutiplatform Build 5. Within the script change [OBJROOT="${OBJROOT}"] to: [OBJROOT="${OBJROOT}/DependentBuilds"] 6. (pre-existing) Build the project (⌘+B). This will create an AZSClient.framework file on your Desktop.

    opened by MMooreGitHub 3
  • Archive the project show error!!!

    Archive the project show error!!!

    ld: warning: ignoring file /Users/ty19891833/Desktop/Servant/AZSClient.framework/AZSClient, missing required architecture armv7 in file /Users/xxx/Desktop/Servant/AZSClient.framework/AZSClient (2 slices) Undefined symbols for architecture armv7: "OBJC_CLASS$_AZSCloudStorageAccount", referenced from: objc-class-ref in ServerConfiguration.o ld: symbol(s) not found for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation)

    need your answer!

    opened by mhty19891833 3
  • uploadFromFile never reaches completion handler

    uploadFromFile never reaches completion handler

    I have modified the sample, as I want to upload a file, rather than text in body of request.

    The completion handler on uploadFromFile never occurs. The standard upload uploads a file fine to the container.

    There are no errors in the output window in Xcode.

    I have tried this with small files (1Mb and larger 20Mb files)

                    if let resourcePath = Bundle.main.resourcePath {
                        let imgName = "smallimage1mb"
                        let path = resourcePath + "/" + imgName
                        let localURL = URL(string: path)
                        
                        let storageAccount : AZSCloudStorageAccount;
                        try! storageAccount = AZSCloudStorageAccount(fromConnectionString: connectionString)
                        
                        let blobClient = storageAccount.getBlobClient()
                        let options = blobClient.defaultRequestOptions
                        options?.maximumExecutionTime = 30
                        
                        let blockBlob = container!.blockBlobReference(fromName: name)
                        blockBlob.uploadFromFile(with: localURL!, accessCondition: nil, requestOptions: options, operationContext: nil, completionHandler: {(error: Error?) -> Void in
                            
                            if let _ = error {
                                print(error.debugDescription)
                            } else {
                                print("success")
                            }
                        })
                        
                        
                        blockBlob.upload(fromText: textTextField.text ?? "",  completionHandler: { (error: Error?) -> Void in
                            if (self.viewToReloadOnBlobAdd != nil) {
                                self.viewToReloadOnBlobAdd!.reloadBlobList()
                            }
                        })
                    }
    
    opened by jthake-msft 3
  • Any news on replacement

    Any news on replacement

    Which version of the SDK/iOS was used?

    What problem was encountered?

    Hi @zezha-msft As you mentioned, the Azure Storage Client Library for iOS is deprecated. Do you have any update on the replacement? Feel free to contact me in Teams.

    Have you found a mitigation/solution?

    No

    opened by RezaMadi 0
  • The library is written in Objective C and its updated 4 years back.

    The library is written in Objective C and its updated 4 years back.

    We have a concern In follow up with below ticket. TrackingID#2109280060001756

    We are currently implemented upload flow by using iOS NSURLSession API and type as BLOCKBLOB. While discussing on the above ticket we got a reference to this SDK. We would like clarify two questions.

    1). Is this Library is recommended for new Projects as its written in Objective C? or is there any other SDKs? 2). Will this library supported for long term ?

    opened by RameshAran 3
  • Many problems, unable to install

    Many problems, unable to install

    Which version of the SDK/iOS was used?

    iOS 15.0, Xcode 13.1, Swift

    What problem was encountered?

    Every last thing failed. Cocoapods crashed, so I tried building the framework instead. That crashed because of the unable to create framework from AZSClient #98 issue; a workaround on that thread got to where it could build the framework. I dragged the framework folder into my application, and could not build because of an error 'compiling for iOS but the framework is built for iOS and iOS simulator'. I found a workaround online to set the build setting "Validate Workspace" to Yes, but now I get an error: Please try again later. Failed to load Info.plist from bundle at path /var/db/appinstalld/Library/Caches/com.apple.mobile.installd.staging/temp.reCbvg/extracted/WritingDesk.app/Frameworks/AZSClient.framework; Extra info about "/var/db/appinstalld/Library/Caches/com.apple.mobile.installd.staging/temp.reCbvg/extracted/WritingDesk.app/Frameworks/AZSClient.framework/Info.plist": Couldn't stat /var/db/appinstalld/Library/Caches/com.apple.mobile.installd.staging/temp.reCbvg/extracted/WritingDesk.app/Frameworks/AZSClient.framework/Info.plist: No such file or directory

    Have you found a mitigation/solution?

    Yes, I have decided to re-write the app to use AWS instead of Azure

    opened by philkoh 0
  • Any option to use Gzip for compression? Truncated files?

    Any option to use Gzip for compression? Truncated files?

    Which version of the SDK/iOS was used?

    0.2.6

    What problem was encountered?

    I want to use Gzip to compress the data being sent to Azure. Is this already supported or is there some way to add support?

    Also, is there any way to prevent truncated files from being created in the Azure bucket if the iOS client dies and is not able to complete uploading data to Azure?

    Have you found a mitigation/solution?

    No

    opened by machive 0
  • AZSCloudBlobContainer with Swift and SAS not working

    AZSCloudBlobContainer with Swift and SAS not working

    Which version of the SDK/iOS was used?

    Latest available POD

    What problem was encountered?

    We can create the object and upload a file with success in the operation, but when we go to the container in Azure the file its not present at all

    Have you found a mitigation/solution?

    No

    opened by nicoache1 0
Releases(v0.2.6)
  • v0.2.6(Mar 8, 2018)

  • v0.2.5(Nov 23, 2017)

  • v0.2.4(May 11, 2017)

  • v0.2.3(May 8, 2017)

    Changes:

    1. Added new feature: Get/Set Service Properties
    2. Fixed the ASL redefinition problem when installing from Cocoapod
    3. Updated the sample project to use the latest Swift 3.1
    Source code(tar.gz)
    Source code(zip)
  • v0.2.2(May 17, 2016)

  • v0.2.1(May 16, 2016)

    This is a bugfix release on top of the 0.2.0 release, which fixes warnings related to integer size.
    Some blobs can be more than 2^32 bytes long, which means that 32-bit integers cannot index into them fully. NSRange is 32-bit on some platforms. This release adds a new 'AZSULLRange' struct, which is guaranteed to be 64-bit on all platforms. NSRange overloads are still included for convenience.

    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Apr 27, 2016)

    This release adds some new functionality to the Blob Service, including additional SAS support and support for Page and Append blobs. There are also bug fixes, fixing the non-modular header issue when using a CocoaPod and adding bitcode to the build output.

    Important The name of the framework and the name of the global header have changed. From:

    Azure Storage Client Library/Azure Storage Client Library.h to AZSClient/AZSClient.h

    You will need to update your references accordingly.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.2(Feb 17, 2016)

    This is a combination of two bug fixes. First, it changes the framework build script to be more robust - you no longer have to explicitly build the library before building the framework target. Second, it fixes a potential race condition in the library, where a request can hang forever, never calling the callback with the request result.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.1(Dec 7, 2015)

Owner
Microsoft Azure
APIs, SDKs and open source projects from Microsoft Azure
Microsoft Azure
Smooch is the best way to have personal, rich conversations with people on your website or customers on any device

Smooch is the best way to have personal, rich conversations with people on your website or customers on any device. Our features, integrations and developer-friendly APIs empower companies to connect with their customers in a whole new way.

Zendesk 121 Aug 1, 2022
Project Flat iOS is the iOS client of Agora Flat open source classroom.

Agora Flat iOS Project flat is the iOS client of Agora Flat open source classroom. 中文 Features Open sourced front-end and back-end [Flat Web][flat-web

netless 24 Dec 12, 2022
Native iOS implementation of RadarCOVID tracing client using DP3T iOS SDK

RadarCOVID iOS App Introduction Native iOS implementation of RadarCOVID tracing client using DP3T iOS SDK Prerequisites These are the tools used to bu

Radar COVID 146 Nov 24, 2022
MulticoinLightClientKit - A Zcash Lightweight Client SDK for iOS

Zcash iOS Framework A Zcash Lightweight Client SDK for iOS This is an alpha buil

Pirate Chain (ARRR) 0 Aug 27, 2022
Open-source API Client for iOS, iPadOS, macOS. Built with SwiftUI

Yogu Open-source API Client for iOS, iPadOS, macOS. Built with SwiftUI ?? Yogu is currently in development, and not actually usable yet. Please DO NOT

Beomjun Gil 5 Oct 29, 2022
A PocketBase client for iOS, macOS, watchOS, and tvOS

PocketBase A pure Swift client for interfacing with a PocketBase instance. Getting Started Development Environment Easiest way to get started with Poc

Brianna Zamora 10 Dec 24, 2022
⚡️ A fully-featured and blazing-fast Swift API client to interact with Algolia.

The perfect starting point to integrate Algolia within your Swift project Documentation • Community Forum • Stack Overflow • Report a bug • FAQ • Supp

Algolia 192 Dec 23, 2022
Unopinionated and flexible library for easily integrating Tumblr data into your iOS or OS X application.

Tumblr SDK for iOS An unopinionated and flexible library for easily integrating Tumblr data into your iOS or OS X application. The library uses ARC re

Tumblr 420 Dec 8, 2022
iOS_UHF_Sample is a sample App to demonstrate how to use UHFSDK library.

iOS_UHF_Sample is a sample App to demonstrate how to use UHFSDK library.

GIGA-TMS 0 Dec 6, 2021
A library for creating Stream Deck plugins in Swift.

StreamDeck A library for creating Stream Deck plugins in Swift. Usage Your plugin class should inherit from StreamDeckPlugin, which handles the WebSoc

Emory Dunn 15 Jan 2, 2023
The official CovPass(-Check) iOS apps

CovPass / CovPass Check Einfach. Sicher. Papierlos. Mit der CovPass-App können Bürgerinnen und Bürger ihre Corona-Impfungen direkt auf das Smartphone

null 96 Dec 18, 2022
TelegramStickersImport — Telegram stickers importing SDK for iOS

TelegramStickersImport — Telegram stickers importing SDK for iOS TelegramStickersImport helps your users import third-party programaticaly created sti

null 35 Oct 26, 2022
Native iOS port of KDE Connect

Welcome to KDE Connect iOS 2021's Testing Repository! This project is inteded to be the iOS version of the group of applications called KDE Connect, w

KDE GitHub Mirror 292 Dec 27, 2022
Muxer used on top of Feed iOS SDK for airplay

FeedAirplayMuxer Muxer used on top of Feed iOS SDK for airplay purposes. Demo Project --> https://github.com/feedfm/AirplayDemo Feed Airplay Muxer is

Feed Media 0 May 6, 2022
Basispay IOS SDK Version 2

BasisPay-IOS-KIT BasisPay IOS Payment Gateway kit for developers INTRODUCTION This document describes the steps for integrating Basispay online paymen

null 0 Oct 21, 2021
Release repo for Gini Bank SDK for iOS

Gini Bank SDK for iOS The Gini Bank SDK provides components for capturing, reviewing and analyzing photos of invoices and remittance slips. By integra

Gini GmbH 1 Dec 6, 2022
Da Xue Zhang Platform Lvb iOS SDK

Cloud_Lvb_SDK iOS API Reference Dxz Meeting iOS SDK是为 iOS 平台用户音视频服务的开源 SDK。通过大学长开放平台自研RTC,RTM系统,为客户提供质量可靠的音视频服务。 类 类名 描述 CLS_PlatformManager SDK的音视频主要

null 8 Jan 10, 2022
PayPal iOS SDK

PayPal iOS SDK Welcome to PayPal's iOS SDK. This library will help you accept card, PayPal, Venmo, and alternative payment methods in your iOS app. Su

PayPal 25 Dec 14, 2022
Unofficial Notion API SDK for iOS & macOS

NotionSwift Unofficial Notion SDK for iOS & macOS. This is still work in progress version, the module interface might change. API Documentation This l

Wojciech Chojnacki 59 Jan 8, 2023