chore: upgrade DocuSign Android SDK to 2.1.7 and iOS SDK to 4.3.0 for 2.0.0 - #13
Merged
Merged
Conversation
The README documented https://maven.docusign.com/ as the androidMavenRepo default and told bare projects to add it. That host has no DNS record, so the troubleshooting snippet for "Could not find com.docusign:androidsdk" produced exactly that error. The plugin, the module's build.gradle and DocuSign's own install guide all use https://docucdn-a.akamaihd.net/prod/docusignandroidsdk. The troubleshooting entry also explains why that URL returns 404 in a browser: it is a static file host with no index page and no maven-metadata.xml, so only exact versions resolve.
2.1.7 is the version DocuSign's install guide documents. Its release notes say nothing specific, so the upgrade rests on its dependencies: 2.1.4 was built against Glide 4.16 and OkHttp 3.14.9, while expo-image on SDK 55 to 57 already forces Glide 5.0.5 and React Native forces OkHttp 4. 2.1.7 is built against Glide 5.0.4 and OkHttp 4.12.0, moves to RxJava 3 and Room 2.7.2, and ships kotlin-stdlib 2.2.10, which needs a Kotlin 2.1 compiler. Every DocuSign class and method the module calls keeps its public signature. sdk-pdf 2.1.7 still ships GeneratedAppGlideModuleImpl, so the strip stays, pinned to the new hash. No DocuSign AAR carries native libraries and minSdk stays 24. Verified in an Expo SDK 57 app with expo-image: prebuild wrote the stripped AAR, debug and release builds passed checkDebugDuplicateClasses, and a release build on an emulator initialized the SDK, rendered expo-image and got the same 401 DocuSignError from a rejected login as 2.1.4 did.
The podspec's ~> 4.1.1 blocked both 4.2.0 and 4.3.0. 4.3.0 fixes a double JavaScript invocation that caused signing backend errors, and 4.2.0 added Print, Download and Download Separate PDFs to the captive signing menu, with no setup key to hide them. Its breaking changes are limited to the signature capture delegate and container, which the module does not use. DSMManager.h and DSMEnvelopesManager.h are byte-identical, as are the setup keys, notification names and userInfo keys the module reads. Packaging is unchanged: the same two vendored xcframeworks, iOS 12.0 minimum, privacy manifests and Xcode 26.3 toolchain. The new DocusignNative.xcframework in DocuSign's zip depends on DocuSignSDK and is only wired into their Swift package, so CocoaPods correctly leaves it out. DocuSign inserted a DSMErrorCode case mid-enum, so their error codes from 1022 up are one higher, and native.code reports the new values. A committed Podfile.lock keeps 4.1.1 until pod update DocuSign. The README told bare projects to add pod 'DocuSign-iOS-SDK', a pod that stopped at 0.1.3-beta and cannot resolve. The podspec already depends on the DocuSign pod, so pod install is all a bare project needs. Verified with a Release simulator build of an Expo SDK 57 app: pod update installed 4.3.0, the module compiled with no new warnings, and the app initialized the SDK, rendered expo-image and got the same 401 DocuSignError from a rejected login as 4.1.1 did.
Expo's Exception and GenericException declare @unchecked Sendable, and Swift 6 requires each subclass to restate an inherited unchecked conformance, so all six exception classes warned. They now restate it. Both SDK 55 and SDK 57 of ExpoModulesCore declare the conformance, so the restatement is valid across the supported range. DSMManager.defaultConfigurations() is declared inside NS_ASSUME_NONNULL in DocuSign 4.1.1 and 4.3.0, so its ?? [:] fallback could never run. A Release simulator build of an Expo SDK 57 app now reports no warnings from the module, down from seven.
The adm-zip bump and the exact maven repository match landed under ## Next, but 2.0.0 has not been published, so they ship in it. The two entries move verbatim into the 2.0.0 Fixes section and the empty ## Next heading goes.
IronTony
force-pushed
the
chore/docusign-native-sdk-upgrade
branch
from
September 13, 2026 21:13
ff6f01c to
b8fc754
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Moves both native SDKs to DocuSign's current releases for 2.0.0, which is still unpublished: Android 2.1.4 to 2.1.7 and iOS 4.1.1 to 4.3.0. The PR also clears the iOS module's Swift 6 warnings and fixes three README instructions that could not work.
Why
~> 4.1.1blocked both 4.2.0 and 4.3.0.Changes
android/build.gradle:androidsdk,sdk-commonand the stripped AAR path at 2.1.7.plugin/src/index.ts:SDK_PDF_VERSION2.1.7 andSDK_PDF_SHA2563f9be5ff…, recomputed from DocuSign's CDN. sdk-pdf 2.1.7 still shipsGeneratedAppGlideModuleImpl, so the strip stays.ios/ReactNativeDocuSign.podspec:DocuSign ~> 4.3.0.ios/DocuSignError.swift: the six exception classes restate@unchecked Sendable, which Expo'sExceptiondeclares on SDK 55 and 57.ios/DocuSignManager.swift: drops?? [:]onDSMManager.defaultConfigurations(), which is nonnull in both SDK versions.README.md:androidMavenRepodefault and the bare-project Maven snippet pointed atmaven.docusign.com, which has no DNS record.pod 'DocuSign-iOS-SDK', a pod that stopped at0.1.3-beta. The podspec already depends onDocuSign.CHANGELOG.md: a Native SDKs section and a Fixes entry under 2.0.0. The two fix(plugin): clear the adm-zip advisories and the CodeQL maven URL alert #11 entries move from## Nextinto 2.0.0's Fixes, verbatim, because 2.0.0 is unpublished.Consumer-visible changes
DSMErrorCodeEnvelopeHasWitnessRecipientmid-enum, so their error codes from 1022 up are one higher innative.code. The module never compares them, but dashboards keyed on the raw number would shift.Podfile.lockkeeps 4.1.1 untilpod update DocuSign.Verification
API compatibility:
javapdiff of every DocuSign class the Kotlin module touches. The public API it calls is unchanged. Differences are a newDSEnvironment.IL5_ENVIRONMENT, RxJava 3 types on two helper methods the module does not call, and Kotlin internal names moving from$sdk_debugto$sdk.DSMManager.handDSMEnvelopesManager.hare byte-identical between 4.1.1 and 4.3.0, as are the setup keys, notification names anduserInfokeys the module reads.DocuSignSDK4.3.0 now ships a Swift interface, but 4.1.1'sDocuSignAPIalready had one from the same Swift 6.2.4 compiler, so there is no new toolchain floor.Builds and runtime, in an Expo SDK 57 / RN 0.86.3 app with expo-image, installed from
npm packof this branch:checkDebugDuplicateClassespasses.GeneratedAppGlideModuleImpl. I ran that control on 2.1.4; 2.1.7's sdk-pdf ships the same class.pod installresolvedDocuSign 4.3.0.initializesucceeds,isLoggedInreturnsfalseand expo-image renders.DocuSignError(login_failed,auth, HTTP 401).Repo: plugin
tsc, build, lint, examples type-check and all 100 Jest tests pass on the rebased branch.After the rebase onto #11:
git range-diffshows the four upgrade commits are identical to the ones reviewed before the rebase.build.gradlebyte-identical and reused the cached AAR, and the Android release build passedcheckReleaseDuplicateClasses.Not verified
Notes
mainafter fix(plugin): clear the adm-zip advisories and the CodeQL maven URL alert #11 merged, with no conflicts.android/build.gradlestill declares the moduleversionandversionNameas1.0.5. That was already stale onmain.ff6f01c) and again after it (b8fc754). It recomputed the sdk-pdf hash, compared the iOS headers byte for byte and checked the dependency versions against the POMs.main, not this PR:withDocuSignAndroidStrippedAarFlatDirsilently does nothing on the SDK 57 template, because its regex allows one level of brace nesting andallprojects.repositorieshas two. The build doesn't need it, sinceandroid/build.gradlereferences the stripped AAR by file path.