Подтвердить что ты не робот

Использовать модуль CocoaPods в компоненте пользовательского пользовательского интерфейса React Native

Я создаю компонент React Native UI, который будет использовать SDK Google Maps iOS для отображения карт в приложении React. Это создается как статическая Cocoa Touch Framework, поэтому я могу использовать ее в разных проектах.

Пока эта структура не делает многого, я просто пытаюсь ее собрать, прежде чем я попытаюсь сделать что-нибудь полезное с ней. У меня есть Podfile, который загружается в SDK Google Maps, и я запустил команду 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 так: есть некоторые красные файлы (я не слишком уверен, что они означают?):

Дерево файлов Xcode

Я также добавил продукт из своей статической библиотеки в список Link Binary With Libraries в разделе Build Phases основного проекта React:

Сборка фаз

Однако, когда я пытаюсь скомпилировать проект, я получаю некоторые ошибки, которые приводят к сбою сборки так:

Сбой сборки

Я уверен, что я сделал что-то неправильно при импорте SDK Google Maps с помощью CocoaPods. Я не смог следить за документами и использовать файл .xcworkspace при импорте моей статической библиотеки в приложение React, которое, возможно, не так, но я не могу понять, как его запустить!

Update:

Я могу получить код для компиляции, если я включаю проект карты с использованием файла .xcworkspace, но тогда я не могу получить доступ к двоичным файлам или включать их в любые фазы сборки, что не полезно:

Вместо использования файла .xcworspace

Кто-нибудь знает, как я могу использовать SDK Google Maps iOS, как это, в приложении React Native?

4b9b3361

Ответ 1

В случае, если у вас есть проект React Native App Project, позвоните ему MyApp.xcodeproj, и вы включите проект библиотеки, GoogleMapView.xcodeproj, вы не сможете использовать CocoaPods в GoogleMapView, просто перетащив его в MyApp.xcodeproj, как вы это делали в этом примере.

Если вы хотите использовать CocoaPods для перемещения в GoogleMaps Pod, вы должны выполнить проект GoogleMapView ТАКЖЕ с помощью CocoaPods.

Так же:

# MyApp/Podfile

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

Но прежде чем вы это сделаете, вам нужно убедиться, что проект GoogleMapView project/private CocoaPod настроен правильно.

Сначала подфайл:

# 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

Как только эти три файла будут установлены, вы сможете повторно использовать GoogleMapView с помощью CocoaPods!

Вы даже можете загрузить его в центральный репозиторий CocoaPods для совместного использования с другими.

Надеюсь, это поможет. Дайте мне знать, если вам нужно уточнение.