icloud_storage_sync
iCloud Sync Flutter प्लगइन के साथ अपने ऐप के डेटा को आसानी से सिंक और सुरक्षित करें, बिना किसी दिक्कत के iCloud एकीकरण प्राप्त करें।
iCloud Sync Flutter प्लगइन के साथ अपने ऐप के डेटा को आसानी से सिंक और सुरक्षित करें, बिना किसी दिक्कत के iCloud एकीकरण प्राप्त करें।
{"sdk":"flutter"}^2.1.8^2.1.5>=0.20.2^6.0.0{"sdk":"flutter"}यह अंग्रेज़ी मूल स्नैपशॉट है। नवीनतम सामग्री GitHub पर देखें।
Seamless iCloud integration for your Flutter iOS apps!
iCloud Storage Sync BanneriCloud_Storage_Sync simplifies iCloud storage integration, bringing powerful cloud capabilities to your Flutter iOS apps:
🔄 Effortless backup and sync of app data
📱💻 Consistent user experience across all devices
🔒 Secure storage and retrieval of important information
☁️ Seamless integration with the iCloud ecosystem
| Feature | Description |
|---|---|
| 📂 | Get iCloud files |
| ⬆️ | Upload files to iCloud |
| ✏️ | Rename iCloud files |
| 🗑️ | Delete iCloud files |
| ↔️ | Move iCloud files |
| 🔍 | Filter by path prefix |
| ⏱️ | Timeout support |
Advanced Features:
Add this to your pubspec.yaml:
dependencies:
icloud_storage_sync: ^1.0.0
Run:
flutter pub get
Update your iCloud Container ID in the example app:
In example/lib/controller/icloud_plugin_controller.dart:
final iCloudContainerId = 'iCloud.com.yourcompany.appname'; // Replace with your container ID
In example/ios/Runner/Info.plist:
<key>iCloud.com.yourcompany.appname</key> <!-- Replace with your container ID -->
In example/ios/Runner/Runner.entitlements and RunnerDebug.entitlements:
<string>iCloud.com.yourcompany.appname</string> <!-- Replace with your container ID -->
ℹ️ Note: Your iCloud Container ID should match the format:
iCloud.<your-team-id>.<your-bundle-id>
Import in your Dart code:
import 'package:icloud_storage_sync/icloud_storage_sync.dart';
Before diving in, make sure you have:
☑️ An Apple Developer account
☑️ App ID and iCloud Container ID
☑️ iCloud capability enabled and assigned
☑️ iCloud capability configured in Xcode
🔍 See How to set up iCloud Container for step-by-step instructions.
Future<List<CloudFiles>> getCloudFiles({required String containerId}) async {
return await icloudSyncPlugin.getCloudFiles(containerId: containerId);
}
// Gather files with optional path prefix filtering
Future<List<ICloudFile>> gatherFilesFromSubdirectory({
required String containerId,
required String pathPrefix,
}) async {
return await icloudSyncPlugin.gather(
containerId: containerId,
relativePathPrefix: pathPrefix, // e.g., 'Documents/', 'Projects/MyApp/'
);
}
// Gather files with timeout to prevent indefinite hangs
Future<List<ICloudFile>> gatherFilesWithTimeout({
required String containerId,
required Duration timeout,
}) async {
try {
return await icloudSyncPlugin.gather(
containerId: containerId,
timeout: timeout, // e.g., Duration(seconds: 30)
);
} on PlatformException catch (e) {
if (e.code == 'METADATA_QUERY_TIMEOUT') {
debugPrint('iCloud query timed out');
}
return [];
}
}
// Combine both features for optimal performance
Future<List<ICloudFile>> gatherFilesOptimized({
required String containerId,
required String pathPrefix,
}) async {
return await icloudSyncPlugin.gather(
containerId: containerId,
relativePathPrefix: pathPrefix,
timeout: Duration(seconds: 30),
);
}
Features:
relativePathPrefix - Filter to specific subdirectory for faster queriestimeout - Set time limit to prevent indefinite hangsFuture<void> upload({
required String containerId,
required String filePath,
String? destinationRelativePath,
StreamHandler<double>? onProgress,
}) async {
await icloudSyncPlugin.upload(
containerId: containerId,
filePath: filePath,
destinationRelativePath: destinationRelativePath,
onProgress: onProgress,
);
}
Future<void> rename({
required String containerId,
required String relativePath,
required String newName,
}) async {
await icloudSyncPlugin.rename(
containerId: containerId,
relativePath: relativePath,
newName: newName,
);
}
Future<void> delete({
required String containerId,
required String relativePath,
required bool isDirectory
}) async {
await icloudSyncPlugin.delete(
containerId: containerId,
relativePath: relativePath,
isDirectory: isDirectory
);
}
Future replaceFile({
required String updatedFilePath,
required String relativePath
}) async {
await icloudSyncPlugin.replace(
containerId: iCloudContainerId,
updatedFilePath: updatedFilePath,
relativePath: relativePath,
);
}
Future<void> move({
required String containerId,
required String fromRelativePath,
required String toRelativePath,
}) async {
await IcloudSyncPlatform.instance.move(
containerId: containerId,
fromRelativePath: fromRelativePath,
toRelativePath: toRelativePath,
);
}
👤 Log in to your Apple Developer account and select 'Certificates, IDs & Profiles'.
🆔 Create an App ID (if needed) and an iCloud Containers ID:
iCloud Container ID🔗 Assign the iCloud Container to your App ID:
Assign iCloud Capability💻 In Xcode, enable iCloud capability and select your container:
Xcode CapabilityMade with ❤️ by the DevCodeSpace