我正在构建一个React Native UI组件,该组件将使用Google Maps iOS SDK在React应用中呈现地图。这是作为静态Cocoa Touch Framework构建的,因此我可以在不同的项目中使用它。
到目前为止,这个框架并没有做太多,我只是想在我尝试做任何有用的事情之前让它进行编译。我有一个Podfile
加载到Google Maps SDK中,我运行pod install
命令:
# 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.h
和GoogleMapView.m
个文件,这些文件将在此模块中完成。现在他们并没有做太多的事情:
@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.h
和GoogleMapViewManager.m
个文件,这些文件为React Native提供了桥梁。同样,这些现在做不了多少!:
#import "RCTViewManager.h"
@interface GoogleMapViewManager : RCTViewManager
@end
-
#import "GoogleMapView.h"
#import "GoogleMapViewManager.h"
@implementation GoogleMapViewManager
RCT_EXPORT_MODULE()
- (UIView *)view
{
GoogleMapView *map = [[GoogleMapView alloc] init];
return map;
}
@end
我已经将这个库添加到我的React Native XCode项目中了 - 列出了一些红色文件(我不太清楚它们是什么意思?):
我还将静态库中的产品添加到主要React项目的Link Binary With Libraries
部分的Build Phases
列表中:
然而,当我尝试编译项目时,我得到一些错误导致构建失败,如下所示:
我确信在使用CocoaPods导入Google Maps SDK时我做错了。在将我的静态库导入React应用程序时,我无法关注文档并使用.xcworkspace
文件,这可能是错误的,但我无法弄清楚如何让它运行!
更新
如果我使用.xcworkspace
文件包含map项目,我可以获得编译代码,但是我无法访问二进制文件或将它们包含在任何无用的构建阶段:< / p>
有人知道如何在React Native应用中使用这样的Google Maps iOS SDK吗?
答案 0 :(得分:2)
如果您有React Native App项目,请将其称为MyApp.xcodeproj
,并且您要包含一个图书馆项目GoogleMapView.xcodeproj
,您将无法使用在GoogleMapView中使用CocoaPods,只需将其拖放到MyApp.xcodeproj
中,就像在此示例中所做的那样。
如果你想使用CocoaPods引入GoogleMaps
Pod,你必须使用CocoaPods拉入你的GoogleMapView
项目。
像这样:
# 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" => "davidykay@gmail.com" }
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
一旦这三个文件到位,您就可以使用CocoaPods重新使用GoogleMapView
了。
您甚至可以将其上传到中央CocoaPods存储库以与他人共享。
希望这会有所帮助。如果您需要澄清,请告诉我。