2015-10-19 10 views
13

Reactアプリで地図をレンダリングするためにGoogle Maps iOS SDKを使用するReact Native UIコンポーネントを構築しています。これは静的なCocoa Touch Frameworkとして構築されており、別のプロジェクトでも使用できます。ReactネイティブカスタムUIコンポーネントでCocoaPodモジュールを使用

これまでのところ、このフレームワークはあまり効果がありません。私はそれを使う前にコンパイルするようにしています。

# Uncomment this line to define a global platform for your project 
platform :ios, '8.1' 
# Uncomment this line if you're using Swift 
# use_frameworks! 

target 'GoogleMapView' do 
    source 'https://github.com/CocoaPods/Specs.git' 
    pod 'GoogleMaps' 
end 

私はこのモジュールで力仕事を行いますGoogleMapView.hGoogleMapView.mファイルを持っている:私はGoogleマップSDKにロードし、私はpod installコマンドを実行したPodfileを持っています。今のところ、彼らは本当に多く行わない。

@import GoogleMaps; 

@interface GoogleMapView: GMSMapView 

@end 

-

#import "GoogleMapView.h" 

@implementation GoogleMapView { 
    GMSMapView *mapView_; 
} 

- (void)viewDidLoad { 
    // Create a GMSCameraPosition that tells the map to display the 
    // coordinate -33.86,151.20 at zoom level 6. 
    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.86 
                  longitude:151.20 
                   zoom:6]; 
    mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera]; 
    mapView_.myLocationEnabled = YES; 
    self.view = mapView_; 

    // Creates a marker in the center of the map. 
    GMSMarker *marker = [[GMSMarker alloc] init]; 
    marker.position = CLLocationCoordinate2DMake(-33.86, 151.20); 
    marker.title = @"Sydney"; 
    marker.snippet = @"Australia"; 
    marker.map = mapView_; 
} 

@end 

それから私は、ネイティブに反応するようにブリッジを提供GoogleMapViewManager.hGoogleMapViewManager.mファイルを持っています。記載されているいくつかの赤のファイルが(ある - ので、私は私のようにネイティブのXcodeプロジェクトを反応させるために、このライブラリを追加しました

#import "GoogleMapView.h" 
#import "GoogleMapViewManager.h" 

@implementation GoogleMapViewManager 

RCT_EXPORT_MODULE() 

- (UIView *)view 
{ 
    GoogleMapView *map = [[GoogleMapView alloc] init]; 

    return map; 
} 

@end 

- ここでも、これらは!:今くらい

#import "RCTViewManager.h" 

@interface GoogleMapViewManager : RCTViewManager 

@end 

をしません私は、彼らが何を意味するか、あまりにもわからない):?

Xcode File Tree

は、私はまたにLink Binary With Librariesリストに私の静的ライブラリから製品を追加しました私はプロジェクトをコンパイルしようとすると、私はビルドがそうのように失敗する原因となっているいくつかのエラーを取得し、しかし

Build Phases

Build Failure

メインのセクションでは、プロジェクトに反応します私は、CocoaPodを使ってGoogle Maps SDKをインポートするときに間違ったことをしたことは確かです。静的ライブラリをReactアプリにインポートする際に、おそらく何が問題なのでしょうか、私はドキュメントに従い、.xcworkspaceファイルを使用することができませんでしたが、実行する方法を理解できませんでした。

更新:

私は.xcworkspaceファイルを使用してマッププロジェクトが含まれている場合にコンパイルするためのコードを取得することができますが、その後、私はバイナリにアクセスすることはできないんだか、どのISN任意のビルドフェーズに含めます「Tは便利:

Use .xcworspace file instead

誰も私が反応ネイティブアプリでこのようなGoogleマップのiOS SDKを利用することができる方法を知っていますか?

+0

ライブラリプロジェクトでCocoaPodを使用する方法がわかりませんが、オリジナルのReactプロジェクトにGoogle Maps関連のクラスを直接含めることができます(ライブラリを共有する予定がない場合) –

+0

これは私がしなければならなかったことですこれは '#react-native upgrade'コマンドがXCodeプロジェクトを混乱させるので、Reactバージョンを更新する必要がある場合に大きな問題を引き起こします。 – edcs

+0

私はそれを行う最もクリーンな方法は、CocoaPods経由で反応ネイティブをインストールし、依存関係を別のポッドとして追加することだと思います。 – Adamski

答えて

2

あなたは、ネイティブアプリのプロジェクトに反応のがMyApp.xcodeprojそれを呼びましょう、そしてあなたは、ライブラリプロジェクトを含めている、GoogleMapView.xcodeproj持っている場合は、あなたのようにちょうどMyApp.xcodeprojにそれをドラッグすることでGoogleMapViewでCocoaPodsを使用することはできませんこの例で行っています。

GoogleMapsポッドを引き込むためにCocoaPodsを使用する場合は、GoogleMapViewプロジェクトにCocoaPodsを使用して引き込む必要があります。そのよう

# MyApp/Podfile 

pod 'GoogleMapView', :path => 'Libraries/GoogleMapView' 

しかし、あなたはそれを行う前に、あなたはGoogleMapViewプロジェクト/プライベートCocoaPodが正しく設定されていることを確認する必要があります。まず

、Podfile:次に

# MyApp/Libraries/GoogleMapView/Podfile 

pod 'GoogleMaps' 

、Podspec。このファイルはプロジェクトをCocoaPodsライブラリとしてマークします。

これはpod spec create GoogleMapViewで生成できます。ここで

はあなたが見えるように必要なものです:

# MyApp/Libraries/GoogleMapView/GoogleMapView.podspec 

    Pod::Spec.new do |s| 

     s.name   = "GoogleMapView" 
     s.version  = "0.0.1" 
     s.summary  = "A short description of GoogleMapView." 

     s.description = <<-DESC 
         DESC 

     s.homepage  = "http://EXAMPLE/GoogleMapView" 
     s.license  = "MIT (example)" 


     s.author    = { "David Young-Chan Kay" => "[email protected]" } 

     s.source  = { :git => "http://EXAMPLE/GoogleMapView.git", :tag => "0.0.1" } 

     s.source_files = "Classes", "Classes/**/*.{h,m}" 
     s.exclude_files = "Classes/Exclude" 

     # This is the key line. You must add it by hand. 
     s.dependency 'GoogleMaps' 

    end 

この3つのファイルが所定の場所にしたら、あなたはGoogleMapView使用CocoaPodsを再利用することができるようになります!

他の人と共有するために中央のCocoaPodsリポジトリにアップロードすることもできます。

これが役に立ちます。明確化が必要な場合はお知らせください。

+0

これは素晴らしいと思います。私は余分な1つまたは2つを持っているときにすべてを実装に行くだろう:) – edcs

+0

幸運!それがどうなるか教えてください。 :) –

+0

anwserが正しいのではないかもしれません。 GoogleMapViewでは反応ネイティブを使用します。しかし、ポッド開発では反応ネイティブはありません。 – shawnXiao

関連する問題