Skip to content

Instantly share code, notes, and snippets.

@0x1306a94
0x1306a94 / swift_macro_not_use_spm.md
Last active March 28, 2024 12:35
Swift Macro does not use SPM integration

Swift Macro 不使用 Swift Package Manager如何集成

  • Swift Macro分为两部分,一部分为宏的具体实现(编译器插件),一部分为Macro Lib用于导出宏定义以及所需要的附属代码,这里说的不使用SPM指的是编译器插件这部分
  • 仔细观察Xcode使用SPM集成Macro时,在编译命令中通过-load-plugin-executable参数指定了对应宏实现的插件可执行文件路径
  • 同时在swift源码中也找到了相关参数TypeCheckMacros.cpp TypeCheckMacros.cpp
  • swift源码中可得知,宏实现插件即可以是动态库(dylib)也可以是可执行文件
  • 系统内置的宏实现是通过 -plugin-path <dylib path> 加载
  • 内置的宏实现动态库在Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/Lib/swift/host/plugins
具体步骤
  • 编写宏实现代码,这一步可以通过SPM也可以直接通过Xcode创建命令行程序项目,完成宏实现代码编写
@pofat
pofat / LaunchTracker.swift
Created February 22, 2023 02:10
Get permain and check if it's prewarm
/// iOS 15+
func isPrewarm() -> Bool {
if let prewawrmEnv = ProcessInfo.processInfo.environment["ActivePrewarm"],
prewawrmEnv == "1" {
return true
} else {
return false
}
}
#!/usr/bin/env python
import argparse
import subprocess
import os
import re
import json
def read_version(version):
ver = re.compile('Using\s([\w\_\-]+)\s\(([\d\.]+)\)')
#!/usr/bin/env python
import argparse
import os
VARIANTS = [
'prod',
'debug',
]
#!/usr/bin/env python
import argparse
import subprocess
import plistlib
import os
import xml.etree.ElementTree as ET
TEAM = '___YOUR_TEAM_ID__'
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")
git_repository(
name = "build_bazel_rules_apple",
remote = "https://github.com/bazelbuild/rules_apple.git",
commit = "524ea38c7c1f8a14bdea812f499aea7c5d3d1e13",
shallow_since = "1585159204 -0700"
)
@jacobbubu
jacobbubu / ioslocaleidentifiers.csv
Created February 15, 2012 14:41
iOS Locale Identifiers
We can make this file beautiful and searchable if this error is corrected: No commas found in this CSV file in line 0.
mr Marathi
bs Bosnian
ee_TG Ewe (Togo)
ms Malay
kam_KE Kamba (Kenya)
mt Maltese
ha Hausa
es_HN Spanish (Honduras)
ml_IN Malayalam (India)
ro_MD Romanian (Moldova)