fork印象笔记SDK支持pod安装

{% github it-boyer evernote-sdk-mac fd5da70 width = 30% %}

制作pod支持

  1. fork 并clone代码
1
git clone https://github.com/evernote/evernote-sdk-mac.git
  1. 创建pod spec索引文件
1
2
$ cd evernote-sdk-mac
$ pod spec create EvernoteSDK https://github.com/it-boyer/evernote-sdk-mac.git
  1. 编写配置文件 设置支持的平台,源码目录位置,指定忽略的文件等配置。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
....
spec.osx.deployment_target = "10.7"
...
# ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
spec.source_files  = "EvernoteSDK", "EvernoteSDK/**/*.{h,m}"
spec.exclude_files = "EvernoteSDK/internal/ENOAuthViewController*"

# ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
#spec.requires_arc = true
#spec.xcconfig = {"WARNING_CFLAGS" => '-Wno-nullability-completeness'}
# spec.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
end
  1. 验证EvernoteSDK.podspec 需要用参数:–allow-warnings ,由于源码验证过程中的警告提示问题,导致验证失败
1
$ pod lib lint --allow-warnings
  1. 发布到私库中 先在本地添加私库
1
2
3
$ pod repo add PodRepo https://github.com/it-boyer/PodRepo.git
#输出:
> Cloning spec repo `PodRepo` from `https://github.com/it-boyer/PodRepo.git`

开始发布过程中,也会验证,出现警告问题,需要添加--allow-warnings

config配置个人文档库专栏

{% github it-boyer blogDocs 978ed39 width = 30% %}

忽略配置

文档库主要整理kindle读书笔记,jazzy文档相关html页面,放在hexo中不需要经过md转换html过程。故需要通过hexo的skip_render配置机制,来屏蔽一些目录/文件等。

安装ruby及chruby版本管理

{% github postmodern ruby-install ea2b8bb width = 30% %}

安装工具ruby-install

1
$ brew install ruby-install

安装指定 Ruby 版本

方式一:使用Homebrew安装

1
2
$ ruby-install ruby 2.4.1
$ ruby-install --system ruby  #覆盖系统版本

但Mac最新系统安装Xcode时已经没有Command Line工具,需要单独安装。安装命令行:xcode-select --install

用Hexo做个人Wiki知识管理系统

起始

知识是自己构建出来的,不是别人灌输的,也不是看了各种资料背住就完了。所谓构建,是指接受信息输入之后,通过信息整理加工,消化转变为自己理解的内容,并分类记录在脑部对应类别的不同层次区域。

同步印象笔记到hexo博客

{% github everblogjs everblog-adaptor-hexo 3c081de width = 30% %} {% github everblogjs everblog b1832a6 width = 30% %} Everblog ——使用 Evernote 写博客 印象笔记+hexo搭建自己的个人博客 申请印象笔记token 邮件申请:

1
2
3
欢迎使用印象笔记开发者Token功能,麻烦你回复这封邮件,在收到你的确认邮件后,我们会为你开启开发者Token权限,谢谢。

注:回复邮件的邮箱需要和帐户的注册邮箱地址保持一致,如果当前地址不是帐户注册邮箱,建议使用帐户注册邮箱直接发送邮件到 online-help@yinxiang.com ,并说明需要开启Token即可。

使用 Hexo 主题 图文步骤如下: 在印象笔记操作 创建 _config.yml 创建一些笔记
在hexo中执行 运行 DEBUG=* everblog start 构建并打开构建成功后的主页
使用 Hexo 主题完整步骤如下:

在我的插件中配置多种类型菜单的步骤

我的中新增智慧决策菜单

  1. 先搜集菜单信息 name:菜单名称,必填,显示在我的页面的cell上。 componentId: 业务ID,必填项,通过该字段控制前端权限/业务 group.order: 设置菜单组在我的页面显示的位置 item.order: 设置菜单在自己组中的显示位置 icon:菜单图标的名称,前端需要在我的插件项目的资源包中添加同名的图片 show:设置菜单是否为默认被打包 重要项 contentType: 设置平台配置菜单的样式:如:单选/输入框 等 WebItemUrl: 仅当输入框样式时,前端解析该字段,访问网页。(兼容android问题,输入框必须时绝对路径,即:http开头) method: 待补充 event: 待补充 localURL: 待补充 部分样例如下:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<group order="5" show="1" orientation="0" contentType="SafetyCaterOperate">
    <item>
        <id></id>
        <componentId>SafetyCaterOperate</componentId>
        <name>阳光餐饮运营</name>
        <order>1</order>
        <icon>icon_safetycateroperate</icon>
        <event>JhItemId:</event>
        <method>safetyCaterOperate</method>
        <isArgs>flase</isArgs>
        <isRed>false</isRed>
        <show>0</show>
    </item>
</group>
  1. 信息搜集之后,交付平台人员部署到平台上。

特别注意contentType 输入框类型:

xcode调试中引用python脚本

Xcode集成了LLDB,进一步简化了程序调试流程。虽然LLDB很强大,但是它的命令很有限。所幸的是,lldb包含了对python的支持,使得lldb的拓展成为可能。本人在开发过程中很喜欢使用image lookup 命令,但是苦于每次只能执行一条,相当耗时,因此一直想要找到一种批量执行的方法

swift调用pngquant批量压缩图片

{% github amosavian FileProvider b597244 width = 30% %}

安装FilesProvider

使用FilesProvider来做文件处理,通过SPM管理库依赖

  1. 配置Package.swift
1
2
3
4
5
6
7
8
9
dependencies: [
    // Dependencies declare other packages that this package depends on.
    // .package(url: /* package url */, from: "1.0.0"), 指定版本。giturl
    .package(path: "/Users/admin/hsg/FileProvider")   //源码clone本地,指定路径
],
    .target(
        name: "SPMCmdLineTool",
        dependencies: ["FilesProvider"]),
]
  1. swift build

单元测试

  1. FilesProvider异步处理:需要XCTestExpectation辅助测试
  2. FilesProvider在处理文件(拷贝/重命名/删除)时,不能使用绝对路径,应采用文件相对于documentsProvider.baseURL的相对路径。否则,在当给定的路径包含root目录时,例如/Users/nam/file.png会提示失败。
  3. 在swift调用shell时,目前只能使用Process.launchedProcess类方法执行shell脚本命令。 有可能在单元测试环境,导致其他两种调用shell的失败。

测通可运行的代码片段

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import FilesProvider
var documentsProvider:LocalFileProvider!
var pngexpectation: XCTestExpectation! = nil
override func setUp() {
    // Put setup code here. This method is called before the invocation of each test method in the class.
    documentsProvider = LocalFileProvider(for: .userDirectory, in: .allDomainsMask)
    pngexpectation = self.expectation(description: "BLDownloadImageNotification")
}

func testExample() {
    // This is an example of a functional test case.
    // Use XCTAssert and related functions to verify your tests produce the correct results.
    //创建文件夹
    documentsProvider.create(folder: "testPng", at: "admin/hsg/") { (err) in
        print("新建目录成功")
        //拷贝图片到目录
        self.documentsProvider.contentsOfDirectory(path: "admin/Desktop",           
            completionHandler: { (contents, error) in
            for file in contents
            {
                let png = file.path.hasSuffix("png")
                if png{
                    print("文件路径:\(file.path)")
                    let thePath:NSString = file.path as NSString
                    let toFile = "admin/hsg/testPng/\(thePath.lastPathComponent)"
                    self.documentsProvider.copyItem(path: file.path, to: toFile, overwrite: true, completionHandler: { (err) in
                        //调用shell工具压缩图片
                        self.testProcessRunShellScript(filePath: toFile)
                        print("Name: \(file.name)")
                        print("Size: \(file.size)")
                        print("路径: \(file.path)")
                    })
                }
            }
        })
    }
    waitForExpectations(timeout: 40, handler: nil)
}
//可用
func testProcessRunShellScript(filePath:String) {
    let sub = "_temp.png"
    let pngquantFile = "/Users/"+filePath
    let tmpFilePath = filePath.replacingOccurrences(of: ".png", with: sub)
    let exePath = "/Users/admin/hsg/hexo/GitSubmodules/hsgTool/pngquant/pngquant"
    Process.launchedProcess(launchPath: exePath, arguments: ["--ext",sub,"--speed=3",pngquantFile])
    // 删除旧文件
//        documentsProvider.removeItem(path: filePath) { (error) in
//            //重命名压缩过的tmp文件
//            print("ddddddderr:\(error?.localizedDescription)")
//            self.documentsProvider.moveItem(path: tmpFilePath, to: filePath, overwrite: true,  completionHandler: { (error) in
//                self.pngexpectation.fulfill()
//            })
//        }
}

使用swift开发自己的命令行工具

{% github it-boyer Panagram_Final 8023350 width = 30% %} Command Line Programs on macOS Tutorial swift编写命令行工具

更新7/21/17:macOS教程上的命令行程序已经更新为Xcode 9和Swift 4。

前言

典型的Mac用户使用图形用户界面(GUI)与计算机交互。gui,顾名思义,是基于用户通过输入设备(如鼠标)与计算机进行视觉交互,通过选择或操作屏幕元素(如菜单、按钮等)。 不久前,在GUI出现之前,命令行接口(CLI)还是与计算机交互的主要方法。CLIs是基于文本的接口,用户可以在其中输入要执行的程序名,后面跟着参数。 尽管gui很流行,命令行程序仍然在当今的计算世界中扮演着重要的角色。命令行程序(如ImageMagickffmpeg)在服务器世界中非常重要。事实上,大多数形成Internet的服务器只运行命令行程序。 甚至Xcode也使用命令行程序!当Xcode构建项目时,它调用xcodebuild,它执行实际的构建。如果构建过程被嵌入到Xcode产品中,持续集成解决方案将很难实现,如果不是不可能的话!