用CMake打包一个Sketch插件FrameWork

从标题上来看可能觉得奇怪,CMake不是c和c++开发的管理工具吗,还能做Sketch的插件开发吗?

答案必须是肯定的,CMake很强大的。

一般情况下,我们首选用XCode作为MacOS下的开发,毕竟是一个专业的IDE,可为初学者带来很多便利性。初学者可能也会被XCode的配置搞晕了头,毕竟没有系统的去了解过它的配置原理和参数映射。

说说CMake给我们带来的优势吧:

结构

Sketch插件基础原理上的知识点我这里就直接跳过了。插件是可以加载一个MacOS下的动态库(FrameWork)。

首先我们需要准备两个代码文件:objective-c的头文件和源码文件

然后是一个CMake的配置文件:CMakeLists.txt

.
├── CMakeLists.txt
└── src
    ├── TestDemo.h
    └── TestDemo.m

注意:这里的命名规则,Test开头,代表一个命名空间的规范,NS是Apple的,MS是Sketch的,取一个属于你们的名字就好。

CMakeLists.txt

# CMake 最低版本号要求
cmake_minimum_required (VERSION 3.1)
# set compile tool
set(CMAKE_C_COMPILER /usr/bin/clang)
set(NAME TestDemoOSX)
enable_language(C)
# set project name
project(${NAME} C CXX)

# framewok headers
set(MY_PUBLIC_HEADERS
  ./src/TestDemo.h
)

# source
add_library(${NAME} SHARED
  ./src/TestDemo.h
  ./src/TestDemo.m
)

# doc> https://cmake.org/cmake/help/v3.7/prop_tgt/MACOSX_BUNDLE_INFO_PLIST.html
set_target_properties(${NAME} PROPERTIES
  FRAMEWORK TRUE
  MACOSX_BUNDLE TRUE
  LINKER_LANGUAGE C
  FRAMEWORK_VERSION A
  PUBLIC_HEADER "${MY_PUBLIC_HEADERS}"
  MACOSX_FRAMEWORK_IDENTIFIER com.zobor.zh.TestDemo
)
# link framework
target_link_libraries(${NAME}
   "-framework Foundation"
)

TestDemo.h

#import <Foundation/Foundation.h>
@interface TestDemo: NSObject

- (NSString *) getVersion;

@end

TestDemo.m

#import "TestDemo.h"

@implementation TestDemo 

- (NSString *) getVersion
{
  return @"1.0.0";
}

@end

编译

注意:编译完成之后会看到TestDemoOSX.framework,这个就是我们编译后的动态库。注意public headers的配置,如果动态库下没有headers,sketch是加载不了的

运行

用这个脚本在Sketch里跑验证下我们的oc接口能否跑通。