UnityやFlutterでAntichravityを利用しようとすると、SDK設定の複雑さやプラットフォーム固有の制約によって、多くの開発者が初期段階で躓きます。このガイドでは、SDK導入からビルド完了までの全てのステップで発生しうるエラーを体系的に解決します。
SDK導入と初期設定エラー
Antigravity SDKの導入は、プラットフォームごとに異なるアプローチが必要です。
Unity への SDK 導入
Unity での Antigravity SDK 導入は、Asset Store 経由かダイレクトダウンロード経由の2つの方法があります。
Asset Store の場合:
- Unity Editor を開く → Window > Asset Store
- 検索欄に「Antigravity SDK」と入力
- 「Import」ボタンをクリック
- インポート時に Assets/Plugins フォルダが作成されることを確認
ダイレクトダウンロード の場合:
- Antigravity 公式サイトから
.unitypackageファイルをダウンロード - Unity Editor で Assets > Import Package > Custom Package...
- ダウンロードしたファイルを選択
初期設定エラー: API キーが認識されない
// 間違った設定例
AntigravityClient.Initialize("YOUR_API_KEY");
// ❌ エラー: API key not foundこのエラーが発生した場合、以下を確認してください。
- API キーが
YourApiKey(前後の空白なし) - Editor Settings > Project Settings > Antigravity に設定が保存されているか確認
- Unity を再起動し、キャッシュをクリア: Edit > Clear All EditorPrefs (警告!)
正しい設定方法:
// 正しい設定例
using Antigravity.SDK;
public class AntigravityManager : MonoBehaviour
{
void Start()
{
// PlayerPrefs 経由で API キーを設定
var apiKey = PlayerPrefs.GetString("antigravity_api_key");
AntigravityClient.Initialize(apiKey);
// または Environment から読み込む
var envKey = System.Environment.GetEnvironmentVariable("ANTIGRAVITY_API_KEY");
AntigravityClient.Initialize(envKey);
}
}Flutter への SDK 導入
Flutter では pubspec.yaml に依存関係を追加します。
# pubspec.yaml の例
dependencies:
flutter:
sdk: flutter
antigravity_sdk: ^1.2.0 # 最新版を確認
http: ^0.13.0
provider: ^6.0.0導入後は flutter pub get を実行します。
よくあるエラー:
Error: Could not resolve the SDK path for antigravity_sdk
対処法:
flutter cleanを実行flutter pub getを実行- それでも解決しない場合は、
pubspec.lockを削除して再取得
API 接続と認証エラー
SDK の導入が完了しても、実際の API 接続時に認証エラーが発生することがあります。
Unity での認証エラー
// ❌ よくあるエラーコード
try
{
var response = await AntigravityClient.Instance.CallAsync(new GenerateRequest
{
Prompt = "Hello Antigravity"
});
}
catch (AuthenticationException ex)
{
Debug.LogError($"Auth failed: {ex.Message}");
// Response: 401 Unauthorized
}この場合、以下を確認します。
- API キーの有効期限: ダッシュボードから確認
- API キーに対応する plan が active か確認
- リクエストヘッダに「Authorization: Bearer YOUR_API_KEY」が含まれているか
正しい実装:
public class AntigravityRequester : MonoBehaviour
{
private AntigravityClient _client;
void Awake()
{
_client = new AntigravityClient(new AntigravityConfig
{
ApiKey = PlayerPrefs.GetString("antigravity_api_key"),
Timeout = 30000, // 30秒
RetryCount = 3,
RetryDelay = 1000
});
}
public async Task<GenerateResponse> GenerateText(string prompt)
{
try
{
var request = new GenerateRequest
{
Prompt = prompt,
MaxTokens = 1000,
Temperature = 0.7f
};
var response = await _client.CallAsync(request);
return response;
}
catch (AuthenticationException)
{
Debug.LogError("API key is invalid or expired");
// API キー再取得フローをここに実装
RefreshApiKey();
}
catch (RateLimitException)
{
Debug.LogWarning("Rate limit exceeded, waiting...");
await Task.Delay(5000); // 5秒待機
}
}
private void RefreshApiKey()
{
// サーバー経由で新しい API キーを取得
}
}Flutter での認証エラー
Flutter では認証情報を shared_preferences で管理するのが一般的です。
// lib/services/antigravity_service.dart
import 'package:antigravity_sdk/antigravity_sdk.dart';
import 'package:shared_preferences/shared_preferences.dart';
class AntigravityService {
late AntigravityClient _client;
late SharedPreferences _prefs;
Future<void> initialize() async {
_prefs = await SharedPreferences.getInstance();
final apiKey = _prefs.getString('antigravity_api_key') ?? '';
if (apiKey.isEmpty) {
throw Exception('API key not found in SharedPreferences');
}
_client = AntigravityClient(
apiKey: apiKey,
timeout: Duration(seconds: 30),
);
}
Future<String> generateText(String prompt) async {
try {
final response = await _client.generate(
prompt: prompt,
maxTokens: 1000,
temperature: 0.7,
);
return response.text;
} on AntigravityException catch (e) {
if (e.code == 'AUTH_ERROR') {
// API キー無効 → リフレッシュフローへ
await _refreshApiKey();
rethrow;
} else if (e.code == 'RATE_LIMIT') {
// レート制限 → リトライスケジューリング
await Future.delayed(Duration(seconds: 5));
return generateText(prompt);
}
rethrow;
}
}
Future<void> _refreshApiKey() async {
// バックエンド API を呼び出して新しいキーを取得
// その後 SharedPreferences に保存
}
}ビルドエラーと依存関係の解決
ビルド段階で多くのエラーが発生します。特に iOS と Android で異なる対応が必要です。
iOS ビルドエラー
Xcode でビルドするときの典型的なエラー:
ld: library not found for -lAntigravity
clang: error: linker command failed with exit code 1
対処法:
-
Pods を再インストール:
cd ios rm -rf Pods Podfile.lock pod install --repo-update cd .. -
Xcode build cache をクリア:
rm -rf ~/Library/Developer/Xcode/DerivedData -
それでもダメなら、Podfile を編集:
# ios/Podfile target 'Runner' do pod 'AntigravitySDK', '~> 1.2.0' post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [ '$(inherited)', 'ANTIGRAVITY_ENABLED=1' ] end end end end
Android ビルドエラー
Gradle 同期時に発生しやすいエラー:
Failed to resolve: com.antigravity:sdk:1.2.0
対処法:
-
build.gradle を確認:
// android/app/build.gradle dependencies { implementation 'com.antigravity:sdk:1.2.0' implementation 'com.google.code.gson:gson:2.8.9' // 依存ライブラリ } repositories { google() mavenCentral() maven { url 'https://maven.antigravity.com/releases' // 公式リポジトリ } } -
Gradle キャッシュをクリア:
cd android && ./gradlew clean && cd .. -
マニフェストを確認 (Android 12+):
<!-- android/app/src/main/AndroidManifest.xml --> <uses-permission android:name="android.permission.INTERNET" /> <queries> <package android:name="com.antigravity.*" /> </queries>
コード生成エラー (Kotlin Multiplatform)
KMP でビルドする場合、コード生成の失敗が多いです。
Error: Expected class declaration
原因と対処:
// 正しい構造
commonMain {
dependencies {
implementation("com.antigravity:sdk:1.2.0")
}
}
androidMain {
dependencies {
implementation("androidx.appcompat:appcompat:1.6.1")
}
}
iosMain {
dependencies {
implementation("com.antigravity:sdk-ios:1.2.0")
}
}プラットフォーム固有の問題 (iOS / Android)
iOS 14以降での App Tracking Transparency
Antigravity SDK が複数のドメインにアクセスする場合、ATT (App Tracking Transparency) の許可申請が必要になる場合があります。
// ios/Runner/Runner/AppDelegate.swift
import AppTrackingTransparency
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
if #available(iOS 14, *) {
ATTrackingManager.requestTrackingAuthorization { status in
// 許可結果を処理
}
}
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}Android のネットワークセキュリティ
Android 9 以上では、cleartext (非HTTPS) 通信がデフォルトで禁止されています。
<!-- android/app/src/main/res/xml/network_security_config.xml -->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">api.antigravity.com</domain>
<pin-set>
<!-- Certificate pinning (optional) -->
</pin-set>
</domain-config>
</network-security-config>AndroidManifest.xml で参照:
<!-- android/app/src/main/AndroidManifest.xml -->
<application
android:networkSecurityConfig="@xml/network_security_config"
...>
</application>デバッグとログ出力
問題を特定するには、詳細なログ出力が必須です。
Unity でのロギング
// Assets/Scripts/AntigravityDebugger.cs
public class AntigravityDebugger : MonoBehaviour
{
void Start()
{
AntigravityClient.EnableDebugLogging(true);
// ネットワークトレースを有効化
System.Net.ServicePointManager.ServerCertificateValidationCallback =
(sender, cert, chain, sslPolicyErrors) =>
{
Debug.Log($"SSL Validation: {sslPolicyErrors}");
return true; // 開発環境のみ
};
}
}Flutter でのロギング
// lib/services/logger.dart
import 'package:logger/logger.dart';
final logger = Logger(
printer: PrettyPrinter(
methodCount: 2,
errorMethodCount: 5,
),
);
// 使用例
logger.d('API Call: ${request.toJson()}');
logger.w('Rate limit warning');
logger.e('Authentication error', error: exception);全体を振り返って
Unity と Flutter から Antigravity を連携する際のエラーは、正確には以下の3段階で発生します。(1) SDK 導入と API キー設定、(2) API 認証と接続、(3) ビルド時の依存関係解決。各段階で系統的にチェックリストを実行すれば、ほぼすべてのエラーを回避できます。
プラットフォーム固有の問題 (iOS の ATT、Android のネットワークセキュリティ) も含め、このガイドの実装パターンに従えば、スムーズなモバイル開発が実現します。さらに詳しい実装パターンは、Unity と Antigravity の高速開発ガイド も参照してください。
参考資料
SDK 統合とネイティブプラグイン開発の実務知識は、以下の書籍が参考になります。