Skip to content

Shared Extension #5535

@oleg-moseyko

Description

@oleg-moseyko

Shared Extension
Works fine in a regular app. But the same code for Shared Extension when attempting to upload a file using AWSS3TransferUtility in background mode, the task fails immediately with:

Error Domain=NSURLErrorDomain Code=-995 "(null)"
UserInfo={
_NSURLErrorRelatedURLSessionTaskErrorKey=("BackgroundUploadTask <8A7D2482-1570-4AC0-A552-98909060491B>.<1>"),
_NSURLErrorFailingURLSessionTaskErrorKey=BackgroundUploadTask <8A7D2482-1570-4AC0-A552-98909060491B>.<1>
}

To Reproduce
Steps to reproduce the behavior in Shared Extension:

  1. Configure AWSS3TransferUtility for background uploads.
  2. Files are stored in a shared App Group container (accessible by both the main app and extensions)
  3. Call uploadUsingMultiPart with a valid file URL, bucket, and key.
  4. Observe the task failing with NSURLErrorDomain Code=-995

Code Snippet (Triggering the Issue)

logger.debug("Start utility.uploadUsingMultiPart: \(fileURL)")
utility.uploadUsingMultiPart(
    fileURL: fileURL,
    bucket: bucket,
    key: key,
    contentType: meta.mimeType,
    expression: expression,
    completionHandler: AWSS3UploadCallbacks.completionHandler(finishBlock: { finishBlock() })
).continueWith(block: AWSS3UploadCallbacks.continueWithBlock(uuid: uuid))

Environment(please complete the following information):

  • SDK Version: 2.40.1
  • Swift Version : swift-driver version: 1.115.1 Apple Swift version 6.0.3 (swiftlang-6.0.3.1.10 clang-1600.0.30.1)
  • Xcode Version: 16.2

Device Information (please complete the following information):

  • Device: iPhone12
  • iOS Version: 18.5

Logs


copyItem from: file:///var/mobile/Media/PhotoData/OutgoingTemp/48D50E28-6852-40EE-BBFB-753F04C72167/IMG_9843.PNG to: file:///private/var/mobile/Containers/Shared/AppGroup/45CB7ADF-146A-4AB2-9603-1D41B098B536/images/C880C843-CD56-40F4-B51D-0E3FAE79E606.PNG
Задача 39313AE9-9F26-4694-8654-1D92D1C0FC69 сохранена в SwiftData.
🔁 Запускаем обработку контента из Share Extension прямо сейчас
shareUploads.count 1
shareUpload 164F9C92-B2F5-4895-9C2D-4C95C7084F8C nil Optional("SharedToImagelocker") 1
GraphQLQueryHelper.createFilterString filterString AlbmN: "SharedToImagelocker"
🟡 createAlbum input: AlbmN: "SharedToImagelocker"
teamId: 2
Updating state from UNKNOWN to WAITING
MIME Type: image/png
meta >>>>>>>>>>>>>>>>> ImageLockerShareExt.Meta
⬆️ Starting uploadUsingMultiPart... UUID: 39313AE9-9F26-4694-8654-1D92D1C0FC69
bucket upload.imagelocker.com key: olegmoseyko/GlobalDeveloperTeam/SharedToImagelocker/1751192650151-IMG_9843.PNG, fileURL: file:///private/var/mobile/Containers/Shared/AppGroup/45CB7ADF-146A-4AB2-9603-1D41B098B536/images/C880C843-CD56-40F4-B51D-0E3FAE79E606.PNG, uuid: 39313AE9-9F26-4694-8654-1D92D1C0FC69,
🔥 Starting TransferUtility initialization...
teamId: 2
getAwsCredetials response: 649 bytes
🔄 getAwsCredetials response received
🔄 AWS credentials refreshed successfully.
CredentialsProvider init
CocoaLumberjack: Warning: Usage of AWSDDTTYLogger detected when AWSDDOSLogger is available and can be used! Please consider migrating to AWSDDOSLogger.
✅ TransferUtility initialized successfully.
AWSS3TransferService initialized
 x-amz-meta-albmi: 131317
 x-amz-meta-restapibaseurl: https://execute-api.imagelocker.com/api/1.0
 x-amz-meta-filemodified: 1751089695
 x-amz-meta-fileuri: file:///private/var/mobile/Containers/Shared/AppGroup/45CB7ADF-146A-4AB2-9603-1D41B098B536/images/C880C843-CD56-40F4-B51D-0E3FAE79E606.PNG
 x-amz-meta-filesize: 1632348
 x-amz-meta-usrn: olegmoseyko
 x-amz-meta-filetaken: 1751089695
 x-amz-meta-absolutepath: file:///private/var/mobile/Containers/Shared/AppGroup/45CB7ADF-146A-4AB2-9603-1D41B098B536/images/C880C843-CD56-40F4-B51D-0E3FAE79E606.PNG
 x-amz-meta-usri: 16
 x-amz-meta-uploadtype: Device
 x-amz-meta-filemimetype: image/png
 x-amz-meta-filename: IMG_9843.PNG
 x-amz-meta-bucket: upload.imagelocker.com
 x-amz-meta-fullpath: /SharedToImagelocker/IMG_9843.PNG
 x-amz-meta-albmn: SharedToImagelocker
 x-amz-meta-filehash: item.fileHash!
 x-amz-meta-tag: 20250629
 x-amz-meta-teami: 2
 x-amz-meta-teamn: GlobalDeveloperTeam
 x-amz-meta-dvci: 118
 x-amz-meta-author: olegmoseyko
 x-amz-meta-filetype: Image
 x-amz-meta-fileadded: 1751089695
 x-amz-meta-key: olegmoseyko/GlobalDeveloperTeam/SharedToImagelocker/1751192650151-IMG_9843.PNG
 x-amz-meta-token: 651466E3-D629-4755-967D-B0EF790CA455
 x-amz-meta-phgrusri: 16
Start utility.uploadUsingMultiPart: file:///private/var/mobile/Containers/Shared/AppGroup/45CB7ADF-146A-4AB2-9603-1D41B098B536/images/C880C843-CD56-40F4-B51D-0E3FAE79E606.PNG
2025-06-29 12:24:10:409 ImageLockerShareExt[2943:567569] File size is 1632348
2025-06-29 12:24:10:409 ImageLockerShareExt[2943:567569] Number of parts is 1
2025-06-29 12:24:10:429 ImageLockerShareExt[2943:567569] Bucket name 'upload.imagelocker.com' is not compatible with virtual-host URLs, continuing to use path-style URL
CredentialsProvider credentials
✅ Returning cached credentials.
CredentialsProvider return current credentials
>>> FILE: IMG_9843.PNG
📦 Контент из Share Extension обработан
*********************dismiss****************************************
2025-06-29 12:24:10:430 ImageLockerShareExt[2943:567570] Request headers:
{
    Authorization = "****";
    "Content-Type" = "image/png";
    Host = "s3.us-east-1.amazonaws.com";
    "User-Agent" = "aws-sdk-iOS/2.40.1 iOS/18.5 en_UA transfer-utility";
    "X-Amz-Date" = 20250629T102410Z;
    "X-Amz-Security-Token" = "****";
    "x-amz-content-sha256" = *****;
    "x-amz-meta-absolutepath" = "file:///private/var/mobile/Containers/Shared/AppGroup/45CB7ADF-146A-4AB2-9603-1D41B098B536/images/C880C843-CD56-40F4-B51D-0E3FAE79E606.PNG";
    "x-amz-meta-albmi" = 131317;
    "x-amz-meta-albmn" = SharedToImagelocker;
    "x-amz-meta-author" = olegmoseyko;
    "x-amz-meta-bucket" = "upload.imagelocker.com";
    "x-amz-meta-dvci" = 118;
    "x-amz-meta-fileadded" = 1751089695;
    "x-amz-meta-filehash" = "item.fileHash!";
    "x-amz-meta-filemimetype" = "image/png";
    "x-amz-meta-filemodified" = 1751089695;
    "x-amz-meta-filename" = "IMG_9843.PNG";
    "x-amz-meta-filesize" = 1632348;
    "x-amz-meta-filetaken" = 1751089695;
    "x-amz-meta-filetype" = Image;
    "x-amz-meta-fileuri" = "file:///private/var/mobile/Containers/Shared/AppGroup/45CB7ADF-146A-4AB2-9603-1D41B098B536/images/C880C843-CD56-40F4-B51D-0E3FAE79E606.PNG";
    "x-amz-meta-fullpath" = "/SharedToImagelocker/IMG_9843.PNG";
    "x-amz-meta-key" = "olegmoseyko/GlobalDeveloperTeam/SharedToImagelocker/1751192650151-IMG_9843.PNG";
    "x-amz-meta-phgrusri" = 16;
    "x-amz-meta-restapibaseurl" = "https://execute-api.imagelocker.com/api/1.0";
    "x-amz-meta-tag" = 20250629;
    "x-amz-meta-teami" = 2;
    "x-amz-meta-teamn" = GlobalDeveloperTeam;
    "x-amz-meta-token" = "651466E3-D629-4755-967D-B0EF790CA455";
    "x-amz-meta-uploadtype" = Device;
    "x-amz-meta-usri" = 16;
    "x-amz-meta-usrn" = olegmoseyko;
}
2025-06-29 12:24:10:430 ImageLockerShareExt[2943:567570] Request body:

2025-06-29 12:24:10:865 ImageLockerShareExt[2943:567574] Response headers:
{
    Date = "Sun, 29 Jun 2025 10:24:11 GMT";
    Server = AmazonS3;
    "Transfer-Encoding" = Identity;
    "x-amz-abort-date" = "Mon, 07 Jul 2025 00:00:00 GMT";
    "x-amz-abort-rule-id" = AbortIncompleteMultipartUpload;
    "x-amz-id-2" = "zIVjoac7Is2zb5sfXV+myc1DJp+zernmRe0T/XnWicSVQK9R1ilTcZAUZovgCdx4NxNE32bWf/w6SIIaGnXhxKhQTODcrXVs542GMGIObXI=";
    "x-amz-request-id" = CVNPX83NEHR8N86B;
    "x-amz-server-side-encryption" = AES256;
}
2025-06-29 12:24:10:865 ImageLockerShareExt[2943:567574] Response body:
<?xml version="1.0" encoding="UTF-8"?>
<InitiateMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Bucket>upload.imagelocker.com</Bucket><Key>olegmoseyko/GlobalDeveloperTeam/SharedToImagelocker/1751192650151-IMG_9843.PNG</Key><UploadId>LFqgHv6toyx1U3.Qr.IsaZ3dCYDuwIJ1NdC1sv7Turv4Wn__4WUYAWG_QmQEuXrvvHns0ZF953wmBcEo7ss2flI5ML84acW90l21PEgT9V8Jy_y2edZTP8aJdTaqVBezlzU_EddvCQFY9XyTHo8JGw--</UploadId></InitiateMultipartUploadResult>
2025-06-29 12:24:10:880 ImageLockerShareExt[2943:567574] Initiated multipart upload on server: LFqgHv6toyx1U3.Qr.IsaZ3dCYDuwIJ1NdC1sv7Turv4Wn__4WUYAWG_QmQEuXrvvHns0ZF953wmBcEo7ss2flI5ML84acW90l21PEgT9V8Jy_y2edZTP8aJdTaqVBezlzU_EddvCQFY9XyTHo8JGw--
2025-06-29 12:24:10:880 ImageLockerShareExt[2943:567574] Concurrency Limit is 6
2025-06-29 12:24:10:880 ImageLockerShareExt[2943:567574] Setting Base URL to Caches Directory: /var/mobile/Containers/Data/PluginKitPlugin/D2AE381C-5EFF-4639-AF84-66F901918CAE/Library/Caches
2025-06-29 12:24:10:881 ImageLockerShareExt[2943:567574] Partial File URL: /var/mobile/Containers/Data/PluginKitPlugin/D2AE381C-5EFF-4639-AF84-66F901918CAE/Library/Caches/EA393CDD-6C4D-494E-8334- ... 0EA5.tmp
CredentialsProvider credentials
✅ Returning cached credentials.
CredentialsProvider return current credentials
CredentialsProvider credentials
✅ Returning cached credentials.
CredentialsProvider return current credentials
2025-06-29 12:24:10:891 ImageLockerShareExt[2943:567574] Added task for part [1] to inProgress list
2025-06-29 12:24:10:894 ImageLockerShareExt[2943:567574] Starting subTask 1
API MISUSE: Resuming an NSURLSessionTask with nil URL.
Task <13563DB4-49D9-4380-88FA-B90D8A94B068>.<1> finished with error [-995] Error Domain=NSURLErrorDomain Code=-995 "(null)" UserInfo={_NSURLErrorRelatedURLSessionTaskErrorKey=(
    "BackgroundUploadTask <13563DB4-49D9-4380-88FA-B90D8A94B068>.<1>"
), _NSURLErrorFailingURLSessionTaskErrorKey=BackgroundUploadTask <13563DB4-49D9-4380-88FA-B90D8A94B068>.<1>}
2025-06-29 12:24:10:896 ImageLockerShareExt[2943:567569] Thread:<NSThread: 0x114098e80>{number = 3, name = (null)}: didCompleteWithError called for task 1
CredentialsProvider credentials
2025-06-29 12:24:10:897 ImageLockerShareExt[2943:567569] Bucket name 'upload.imagelocker.com' is not compatible with virtual-host URLs, continuing to use path-style URL
✅ Returning cached credentials.
CredentialsProvider return current credentials
2025-06-29 12:24:10:898 ImageLockerShareExt[2943:567570] Request headers:
{
    Authorization = "AWS4-HMAC-SHA256 Credential=******/20250629/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date;x-amz-security-token, Signature=****";
    "Content-Type" = "binary/octet-stream";
    Host = "s3.us-east-1.amazonaws.com";
    "User-Agent" = "aws-sdk-iOS/2.40.1 iOS/18.5 en_UA transfer-utility";
    "X-Amz-Date" = 20250629T102410Z;
    "X-Amz-Security-Token" = "*****";
    "x-amz-content-sha256" = ***;
}
2025-06-29 12:24:11:035 ImageLockerShareExt[2943:567570] Response headers:
{
    Date = "Sun, 29 Jun 2025 10:24:11 GMT";
    Server = AmazonS3;
    "x-amz-id-2" = "tLtgHCQvai/R6vhP+VEQT5Y88amNcpx77hBWrcud3Rd7B539/rYG9oydid+ogzGjWra6jZVjE/17YD/DRloZGMPFHxZ+FNUuasdAmTP6/zw=";
    "x-amz-request-id" = CVNK5XRYF8KS08Z4;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionGeneral questions3Issues related to S3

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions