搜索插件、代码仓与 APP 分类

插件详情v0.0.5

icloud_storage_sync

使用 iCloud Sync Flutter 插件轻松同步和保护您应用的数据,实现无缝的 iCloud 集成。

iOSmacOS
近 30 天下载
784
喜欢数
45
Pub 分数
150

安装插件

flutter pub add icloud_storage_sync

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

icloud_storage_sync 包为 iOS 和 macOS 上的 Flutter 应用提供了无缝的 iCloud 集成,使开发者能够轻松地在 iCloud 中同步和安全存储应用数据。它提供了一个简单的 API 来管理跨设备的数据持久化,确保用户可以一致地访问其信息。该插件注重安全性,利用 Apple 的 iCloud 服务来保护敏感数据,同时保持高性能和可靠性。非常适合需要跨设备同步且设置简单的应用程序。

适合场景

  • 跨设备数据同步
  • 用户数据的安全云备份
  • Flutter 应用中的无缝 iCloud 集成
  • 离线优先的应用程序,支持云同步
  • 用户资料和偏好持久化

主要特点

  • iOS 和 macOS 原生 iCloud 集成
  • 跨设备自动数据同步
  • 端到端加密支持
  • 用于轻松实现的简单 Flutter API
  • 强大的错误处理和状态监控

适合对象

  • iOS 和 macOS Flutter 开发人员
  • 需要持久用户数据的应用
  • 注重隐私的应用程序
  • 寻求原生云解决方案的开发者
  • 需要最少配置的项目

使用建议

  • 需要 Apple 开发者账户和 iCloud 功能
  • 仅限iOS和macOS平台
  • 依赖于正确的 iCloud 权限和配置
  • 可能需要额外设置才能用于企业用途
  • 不兼容 Android 或 Web 平台

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

📦☁️ iCloud_Storage_Sync Plugin

Seamless iCloud integration for your Flutter iOS apps!

iCloud Storage Sync Banner

🌟 Introduction

iCloud_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

✨ Features

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:

  • 🔍 Path Filtering - Query specific subdirectories instead of entire container for better performance
  • ⏱️ Timeout Support - Set time limits on metadata queries to prevent indefinite hangs
  • 📊 Progress Tracking - Monitor upload/download progress with callbacks
  • 🔄 Stream Updates - Receive live updates as files change in iCloud

🚀 Getting Started

1. 🛠️ Installation

Add this to your pubspec.yaml:

dependencies:
  icloud_storage_sync: ^1.0.0
2. ⚙️ Install the Plugin

Run:

flutter pub get
3. 🔧 Configure Your iCloud Container ID

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>

4. 💻 Usage

Import in your Dart code:

import 'package:icloud_storage_sync/icloud_storage_sync.dart';

📋 Prerequisites

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.


🧰 API Examples

📥 Getting iCloud Files
Future<List<CloudFiles>> getCloudFiles({required String containerId}) async {
  return await icloudSyncPlugin.getCloudFiles(containerId: containerId);
}
📂 Gathering Files with Path Filtering & Timeout
// 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 queries
  • ⏱️ timeout - Set time limit to prevent indefinite hangs
  • 🔄 Both parameters are optional and backwards compatible
📤 Uploading Files to iCloud
Future<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,
  );
}
🏷️ Renaming iCloud Files
Future<void> rename({
  required String containerId,
  required String relativePath,
  required String newName,
}) async {
  await icloudSyncPlugin.rename(
    containerId: containerId,
    relativePath: relativePath,
    newName: newName,
  );
}
🗑️ Deleting iCloud Files
Future<void> delete({
  required String containerId,
  required String relativePath,
  required bool isDirectory
}) async {
  await icloudSyncPlugin.delete(
    containerId: containerId,
    relativePath: relativePath,
    isDirectory: isDirectory
  );
}
🔄 Replace iCloud Files
Future replaceFile({
  required String updatedFilePath,
  required String relativePath
  }) async {
    await icloudSyncPlugin.replace(
      containerId: iCloudContainerId,
      updatedFilePath: updatedFilePath,
      relativePath: relativePath,
    );
}
🔀 Moving iCloud Files
Future<void> move({
  required String containerId,
  required String fromRelativePath,
  required String toRelativePath,
}) async {
  await IcloudSyncPlatform.instance.move(
    containerId: containerId,
    fromRelativePath: fromRelativePath,
    toRelativePath: toRelativePath,
  );
}

🛠 How to set up iCloud Container and enable the capability

  1. 👤 Log in to your Apple Developer account and select 'Certificates, IDs & Profiles'.

  2. 🆔 Create an App ID (if needed) and an iCloud Containers ID:

    iCloud Container ID
  3. 🔗 Assign the iCloud Container to your App ID:

    Assign iCloud Capability
  4. 💻 In Xcode, enable iCloud capability and select your container:

    Xcode Capability

🤝 Contributing


🙏 Acknowledgements

  • Thanks to all the contributors who have helped shape this plugin
  • Apple for providing the iCloud infrastructure

Made with ❤️ by the DevCodeSpace

所属分类

依赖

依赖清单 4 项

源码仓库

使用此插件的项目

暂无相关数据。