为iOS构建osgearth(和osg)

在为iOS构建OSGearth时,需要注意的是,它需要为模拟器和设备构建两个单独的构建。下面的说明配置为生成用于设备的库。在模拟器中使用的构建是相同的,但在构建时需要指向正确的库。

在设备上使用Buld的步骤如下:

  1. 安装CMAKE 2.8.8或更高版本
    或安装 MacPorts 然后 sudo ports install cmake
  2. 安装xcode 4.5.1
    从AppStore下载
  3. 获取依赖项
  4. javascript支持
    与桌面上使用V8引擎的osgearth不同,iOS上的osgearth依赖javascriptcore引擎来支持脚本。
    iOS项目的javascriptcore代码可以在github上找到,网址为:https://github.com/phoboslab/javascriptcore-ios
    如该页所述,可以在 Ejecta project
  5. 下载OSG中继 ::

    mkdir osgearth-build
    cd ./osgearth-build
    svn checkout http://www.openscenegraph.org/svn/osg/OpenSceneGraph/trunk osg-ios
    
  6. 编辑cmakelist.txt以指向您的iOS SDK版本
    检查 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs
    打开cmakelist.txt并将第236行更改为您的SDK版本: (SET (IPHONE_SDKVER "5.1" CACHE STRING "IOS SDK-Version")
    对于lib tiff插件,当前还需要复制第587行并粘贴到第593行的else语句中(提交给osg trunk)
  7. 运行cmake生成osg xcode项目
    使用下面的命令行为iOS设备生成静态gles2 build,更改第三方路径以反映第三方路径
    cd ./osg-ios
    
    cmake ./ -G Xcode -DOSG_BUILD_PLATFORM_IPHONE:BOOL=ON \
    -DBUILD_OSG_APPLICATIONS:BOOL=OFF \
    -DOSG_WINDOWING_SYSTEM:STRING=IOS \
    -DOSG_DEFAULT_IMAGE_PLUGIN_FOR_OSX="imageio" \
    -DOSG_GL1_AVAILABLE:BOOL=OFF \
    -DOSG_GL2_AVAILABLE:BOOL=OFF \
    -DOSG_GLES1_AVAILABLE:BOOL=OFF \
    -DOSG_GLES2_AVAILABLE:BOOL=ON \
    -DOSG_GL_DISPLAYLISTS_AVAILABLE:BOOL=OFF \
    -DOSG_GL_FIXED_FUNCTION_AVAILABLE:BOOL=OFF \
    -DOSG_GL_LIBRARY_STATIC:BOOL=OFF \
    -DOSG_GL_MATRICES_AVAILABLE:BOOL=OFF \
    -DOSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE:BOOL=OFF \
    -DOSG_GL_VERTEX_FUNCS_AVAILABLE:BOOL=OFF \
    -DCURL_INCLUDE_DIR:PATH="/Users/hogbox/Documents/osgearth-build/3rdParty/curl-ios-device/include" \
    -DCURL_LIBRARY:PATH="/Users/hogbox/Documents/osgearth-build/3rdParty/curl-ios-device/lib/libcurl.a" \
    -DFREETYPE_INCLUDE_DIR_freetype2:PATH="/Users/hogbox/Documents/osgearth-build/3rdParty/freetype-ios-universal/include/freetype" \
    -DFREETYPE_INCLUDE_DIR_ft2build:PATH="/Users/hogbox/Documents/osgearth-build/3rdParty/freetype-ios-universal/include" \
    -DFREETYPE_LIBRARY:PATH="/Users/hogbox/Documents/osgearth-build/3rdParty/freetype-ios-universal/lib/libFreeType_iphone_universal.a" \
    -DTIFF_INCLUDE_DIR:PATH="/Users/hogbox/Documents/osgearth-build/3rdParty/tiff-ios-device/include" \
    -DTIFF_LIBRARY:PATH="/Users/hogbox/Documents/osgearth-build/3rdParty/tiff-ios-device/lib/libtiff.a" \
    -DGDAL_INCLUDE_DIR:PATH="/Users/hogbox/Documents/osgearth-build/3rdParty/gdal-ios-device/include" \
    -DGDAL_LIBRARY:PATH="/Users/hogbox/Documents/osgearth-build/3rdParty/gdal-ios-device/lib/libgdal.a" \
    -DDYNAMIC_OPENSCENEGRAPH:BOOL=OFF \
    -DDYNAMIC_OPENTHREADS:BOOL=OFF
    
  8. Open XCode project generated and run BUILD_ALL target

  9. 下载osgearth中继 ::

    cd ../
    git clone git://github.com/gwaldron/osgearth.git osgearth-ios
    
  10. Edit iOS SDK version in ``./osgearth-ios/CMakeList.txt`` (see item 5)

  11. 运行cmake生成osgearth xcode项目
    使用下面的命令行为iOS设备生成静态bulild,更改第三方路径以反映第三方路径
    cmake ./ -G Xcode -DOSG_BUILD_PLATFORM_IPHONE:BOOL=ON \
    -DOSG_DIR:PATH="/Users/hogbox/Documents/osgearth-build/osg-ios" \
    -DCURL_INCLUDE_DIR:PATH="/Users/hogbox/Documents/osgearth-build/3rdParty/curl-ios-device/include" \
    -DCURL_LIBRARY:PATH="/Users/hogbox/Documents/osgearth-build/3rdParty/curl-ios-device/lib/libcurl.a" \
    -DGDAL_INCLUDE_DIR:PATH="/Users/hogbox/Documents/osgearth-build/3rdParty/gdal-ios-device/include" \
    -DGDAL_LIBRARY:PATH="/Users/hogbox/Documents/osgearth-build/3rdParty/gdal-ios-device/lib/libgdal.a" \
    -DGEOS_INCLUDE_DIR:PATH="/Users/hogbox/Documents/osgearth-build/3rdParty/geos-ios-device/include/source/headers" \
    -DGEOS_LIBRARY:PATH="/Users/hogbox/Documents/osgearth-build/3rdParty/geos-ios-device/lib/libGEOS_3.2.a" \
    -DOSGEARTH_BUILD_APPLICATION_BUNDLES:BOOL=OFF \
    -DDYNAMIC_OSGEARTH:BOOL=OFF \
    -DOSGEARTH_USE_QT:BOOL=OFF
    
  12. 打开生成的Xcode项目并生成
    现在不要构建应用程序目标,因为它们会生成错误(cmake当前无法为iOS生成有效的应用程序目标)
    选择 OSGEARTH 导航器视图中的项目(左侧树的顶部)
    选择 添加目标
    选择 聚合目标其他 节,将其命名为lib build(或其他名称)
    选择新目标并选择 建造阶段目标依赖项+
    选择所有libs和插件
    选择新目标作为当前生成目标(播放/运行按钮右侧的组合框)
    构建
  13. 打开并构建示例项目
    osgearth-ios/src/applications/osgearth_viewerIOS/osgEarthViewerIOS.xcodeproj

    编辑 标题搜索路径 在构建设置中,指向OSG和OSGearth文件夹
    编辑 库搜索路径 在构建设置中,指向OSG和OSGearth文件夹
    链接到accelerate.framework(已发送修复程序)
    链接到mobilecoreserves.framework(已发送修复程序)
    如果使用freetypes,则删除armv7s build
    建造