TaskTick 是一款 macOS 原生定时任务管理应用,用 SwiftUI + SwiftData 开发,完全替代 crontab 和 launchd 的手动配置。
主要特点:
brew tap lifedever/tap && brew install --cask task-tick
已增加模板功能:

1
gap 3 天前 via iPhone
感觉会有用,感谢🙏
|
2
gefangshuai OP @gap #1 谢谢支持
|
3
dcncy 2 天前
在 M1 MacOS15 的设备上启动直接崩溃。日志有点大,我分多次贴出来。
------------------------------------- Translated Report (Full Report Below) ------------------------------------- Process: TaskTick [76245] Path: /Applications/TaskTick.app/Contents/MacOS/TaskTick Identifier: com.lifedever.TaskTick Version: 1.0.7 (202603160728) Code Type: ARM-64 (Native) Parent Process: launchd [1] User ID: 501 Date/Time: 2026-03-16 17:02:54.4420 +0800 OS Version: macOS 15.7.4 (24G517) Report Version: 12 Anonymous UUID: E2849EFF-E2BA-9FE0-E1AA-BDDF7FF71FE1 Time Awake Since Boot: 740000 seconds System Integrity Protection: enabled Crashed Thread: 0 Dispatch queue: com.apple.main-thread Exception Type: EXC_BREAKPOINT (SIGTRAP) Exception Codes: 0x0000000000000001, 0x00000001b02711f8 Termination Reason: Namespace SIGNAL, Code 5 Trace/BPT trap: 5 Terminating Process: exc handler [76245] Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 libswiftCore.dylib 0x1b02711f8 _assertionFailure(_:_:file:line:flags:) + 176 1 TaskTick 0x104f104c4 closure #1 in variable initialization expression of static NSBundle.module + 612 2 TaskTick 0x104f10250 one-time initialization function for module + 12 3 libdispatch.dylib 0x19e8d185c _dispatch_client_callout + 16 4 libdispatch.dylib 0x19e8baa28 _dispatch_once_callout + 32 5 TaskTick 0x104e88dec specialized static L10n.findBundle(for:) + 1088 6 TaskTick 0x104e88708 closure #1 in variable initialization expression of static L10n._bundle + 248 7 TaskTick 0x104e88600 one-time initialization function for _bundle + 12 8 libdispatch.dylib 0x19e8d185c _dispatch_client_callout + 16 9 libdispatch.dylib 0x19e8baa28 _dispatch_once_callout + 32 10 TaskTick 0x104efa99c TaskTickApp.body.getter + 4592 11 SwiftUI 0x1cfd58b3c partial apply for closure #1 in AppBodyAccessor.updateBody(of:changed:) + 44 12 SwiftUICore 0x205a1cc10 BodyAccessor.setBody(_:) + 1204 13 SwiftUI 0x1cfd57450 AppBodyAccessor.updateBody(of:changed:) + 152 14 SwiftUICore 0x205a1f300 closure #1 in DynamicBody.updateValue() + 600 15 SwiftUICore 0x205a1ed2c DynamicBody.updateValue() + 928 16 SwiftUICore 0x205aac998 partial apply for implicit closure #1 in closure #1 in closure #1 in Attribute.init<A>(_:) + 32 17 AttributeGraph 0x1cffe9728 AG::Graph::UpdateStack::update() + 524 18 AttributeGraph 0x1cffe9f94 AG::Graph::update_attribute(AG::data::ptr<AG::Node>, unsigned int) + 420 19 AttributeGraph 0x1cfff17b0 AG::Graph::value_ref(AG::AttributeID, unsigned int, AGSwiftMetadata const*, unsigned char&) + 272 20 AttributeGraph 0x1d0008bb8 AGGraphGetValue + 308 21 SwiftUI 0x1cf83bd34 static MenuBarExtraStyleModifier._makeInputs(modifier:inputs:) + 248 22 SwiftUI 0x1cf07b01c static _SceneModifier<>._makeScene(modifier:inputs:body:) + 320 23 SwiftUI 0x1cf07bc6c static ModifiedContent<>._makeScene(scene:inputs:) + 544 24 SwiftUI 0x1cf07bddc closure #2 in static ModifiedContent<>._makeScene(scene:inputs:) + 304 25 SwiftUI 0x1cf07c684 static _SceneModifier_Content._makeScene(scene:inputs:) + 396 26 SwiftUI 0x1cf07bddc closure #2 in static ModifiedContent<>._makeScene(scene:inputs:) + 304 27 SwiftUI 0x1cf07b03c static _SceneModifier<>._makeScene(modifier:inputs:body:) + 352 28 SwiftUI 0x1cf07bc6c static ModifiedContent<>._makeScene(scene:inputs:) + 544 29 SwiftUI 0x1cf07b52c static _SceneModifier._makeScene(modifier:inputs:body:) + 764 30 SwiftUI 0x1cf07bc6c static ModifiedContent<>._makeScene(scene:inputs:) + 544 31 SwiftUI 0x1cf6380b8 _TupleScene.MakeList.visit<A>(type:) + 444 32 SwiftUI 0x1cf823a1c TypeConformance<>.visitType<A>(visitor:) + 120 33 SwiftUI 0x1cf637a1c static _TupleScene._makeScene(scene:inputs:) + 1596 34 SwiftUI 0x1cfd569fc closure #1 in AppGraph.init<A>(app:) + 936 35 SwiftUI 0x1cfd57138 closure #1 in AppGraph.instantiateOutputs() + 952 36 SwiftUI 0x1cfd56be8 AppGraph.instantiateOutputs() + 380 37 SwiftUICore 0x205bf3604 GraphHost.instantiate() + 224 38 SwiftUI 0x1ced5d7bc closure #1 in closure #1 in runApp<A>(_:) + 80 39 SwiftUICore 0x205a23c1c static Update.dispatchImmediately<A>(reason:_:) + 316 40 SwiftUI 0x1ced5d748 closure #1 in runApp<A>(_:) + 236 41 SwiftUI 0x1ced5d648 runApp<A>(_:) + 92 42 SwiftUI 0x1cf0be5c0 static App.main() + 224 43 TaskTick 0x104f000d4 TaskTick_main + 64 44 dyld 0x19e6ceb98 start + 6076 Thread 1: 0 libsystem_pthread.dylib 0x19ea6ab6c start_wqthread + 0 Thread 2: 0 libsystem_pthread.dylib 0x19ea6ab6c start_wqthread + 0 Thread 0 crashed with ARM Thread State (64-bit): x0: 0x0000000152d05a08 x1: 0x0000000200000003 x2: 0xfffffffffffffff0 x3: 0x0000600001228830 x4: 0x0000600001228800 x5: 0x0000000000000013 x6: 0x0000000000000020 x7: 0x0000000000000000 x8: 0xfffffffe00000000 x9: 0x0000000200000003 x10: 0x0000000000000003 x11: 0x0000000000000780 x12: 0x00000000000007fb x13: 0x00000000000007fd x14: 0x000000008781d809 x15: 0x000000008761d00a x16: 0x0000000087800000 x17: 0x0000000000000009 x18: 0x0000000000000000 x19: 0x4000600000e3db30 x20: 0x000000016af89d70 x21: 0xc000000000000033 x22: 0x00006000038048c0 x23: 0x0000000104f1d9c0 x24: 0xd00000000000007e x25: 0x0000000104f40000 x26: 0x0000000104f49000 x27: 0x000000015480dff0 x28: 0x000000020dfe6980 fp: 0x000000016af89d10 lr: 0x00000001b02711f8 sp: 0x000000016af89c90 pc: 0x00000001b02711f8 cpsr: 0x60001000 far: 0x0000000000000000 esr: 0xf2000001 (Breakpoint) brk 1 |
4
dcncy 2 天前
Binary Images:
0x104e70000 - 0x104f3ffff com.lifedever.TaskTick (1.0.7) <f883cc7f-1c6d-3000-b1e2-bcccca292627> /Applications/TaskTick.app/Contents/MacOS/TaskTick 0x105328000 - 0x105333fff libobjc-trampolines.dylib (*) <9a87f143-aa9d-3c46-b2e8-b3fb9215e33e> /usr/lib/libobjc-trampolines.dylib 0x1b023d000 - 0x1b07abf3f libswiftCore.dylib (*) <93a84760-9028-3a6f-aca6-087a0fdd9d9f> /usr/lib/swift/libswiftCore.dylib 0x19e8b6000 - 0x19e8fc75f libdispatch.dylib (*) <63a54ce1-2ab6-3673-82e4-d8489d811475> /usr/lib/system/libdispatch.dylib 0x1ce8b7000 - 0x1cffde41f com.apple.SwiftUI (6.5.4) <20a22d4f-7c44-3b84-929a-b83cb311c984> /System/Library/Frameworks/SwiftUI.framework/Versions/A/SwiftUI 0x205594000 - 0x20615619f com.apple.SwiftUICore (6.5.4) <73b037d1-2d43-374b-a87c-79e26b7ad6b0> /System/Library/Frameworks/SwiftUICore.framework/Versions/A/SwiftUICore 0x1cffdf000 - 0x1d0021d9f com.apple.AttributeGraph (6.5.1) <536bbee2-bada-3d4c-961e-22e7601aeca7> /System/Library/PrivateFrameworks/AttributeGraph.framework/Versions/A/AttributeGraph 0x19e6c8000 - 0x19e76357b dyld (*) <057e5157-4105-3787-b549-e605eb246448> /usr/lib/dyld 0x0 - 0xffffffffffffffff ??? (*) <00000000-0000-0000-0000-000000000000> ??? 0x19ea69000 - 0x19ea75a77 libsystem_pthread.dylib (*) <c0519bf8-8fc4-3222-a4a7-d98af817277c> /usr/lib/system/libsystem_pthread.dylib External Modification Summary: Calls made by other processes targeting this process: task_for_pid: 0 thread_create: 0 thread_set_state: 0 Calls made by this process: task_for_pid: 0 thread_create: 0 thread_set_state: 0 Calls made by all processes on this machine: task_for_pid: 0 thread_create: 0 thread_set_state: 0 VM Region Summary: ReadOnly portion of Libraries: Total=1.2G resident=0K(0%) swapped_out_or_unallocated=1.2G(100%) Writable regions: Total=718.4M written=385K(0%) resident=385K(0%) swapped_out=0K(0%) unallocated=718.0M(100%) VIRTUAL REGION REGION TYPE SIZE COUNT (non-coalesced) =========== ======= ======= Activity Tracing 256K 1 AttributeGraph Data 1024K 1 ColorSync 16K 1 CoreGraphics 16K 1 Foundation 16K 1 Kernel Alloc Once 32K 1 MALLOC 707.5M 43 MALLOC guard page 384K 24 SQLite page cache 128K 1 STACK GUARD 56.0M 3 Stack 9264K 3 VM_ALLOCATE 32K 2 __AUTH 2075K 292 __AUTH_CONST 36.9M 471 __CTF 824 1 __DATA 10.1M 452 __DATA_CONST 17.8M 477 __DATA_DIRTY 1027K 138 __FONT_DATA 2352 1 __INFO_FILTER 8 1 __LINKEDIT 618.6M 3 __OBJC_RO 61.4M 1 __OBJC_RW 2397K 1 __TEXT 575.9M 494 __TPRO_CONST 128K 2 mapped file 57.8M 12 page table in kernel 385K 1 shared memory 1376K 13 =========== ======= ======= TOTAL 2.1G 2442 ----------- Full Report ----------- {"app_name":"TaskTick","timestamp":"2026-03-16 17:02:54.00 +0800","app_version":"1.0.7","slice_uuid":"f883cc7f-1c6d-3000-b1e2-bcccca292627","build_version":"202603160728","platform":1,"bundleID":"com.lifedever.TaskTick","share_with_app_devs":0,"is_first_party":0,"bug_type":"309","os_version":"macOS 15.7.4 (24G517)","roots_installed":0,"name":"TaskTick","incident_id":"01C14076-A28C-41B9-8610-AB71BA0D93D5"} { "uptime" : 740000, "procRole" : "Foreground", "version" : 2, "userID" : 501, "deployVersion" : 210, "modelCode" : "Macmini9,1", "coalitionID" : 59796, "osVersion" : { "train" : "macOS 15.7.4", "build" : "24G517", "releaseType" : "User" }, "captureTime" : "2026-03-16 17:02:54.4420 +0800", "codeSigningMonitor" : 1, "incident" : "01C14076-A28C-41B9-8610-AB71BA0D93D5", "pid" : 76245, "translated" : false, "cpuType" : "ARM-64", "roots_installed" : 0, "bug_type" : "309", "procLaunch" : "2026-03-16 17:02:54.3407 +0800", "procStartAbsTime" : 17887001665419, "procExitAbsTime" : 17887004082221, "procName" : "TaskTick", "procPath" : "\/Applications\/TaskTick.app\/Contents\/MacOS\/TaskTick", "bundleInfo" : {"CFBundleShortVersionString":"1.0.7","CFBundleVersion":"202603160728","CFBundleIdentifier":"com.lifedever.TaskTick"}, "storeInfo" : {"deviceIdentifierForVendor":"FD15E1D5-6069-54F4-8468-E4CB7DB4710E","thirdParty":true}, "parentProc" : "launchd", "parentPid" : 1, "coalitionName" : "com.lifedever.TaskTick", "crashReporterKey" : "E2849EFF-E2BA-9FE0-E1AA-BDDF7FF71FE1", "appleIntelligenceStatus" : {"state":"unavailable","reasons":["regionIneligible","selectedSiriLanguageIneligible","countryLocationIneligible"]}, "codeSigningID" : "com.lifedever.TaskTick", "codeSigningTeamID" : "", "codeSigningFlags" : 570425857, "codeSigningValidationCategory" : 10, "codeSigningTrustLevel" : 4294967295, "codeSigningAuxiliaryInfo" : 0, "instructionByteStream" : {"beforePC":"IAAg1MEF+LfpAwC54gMDquMDBKrkAwWq5QMGquYDB6rnAwiqIwMAlA==","atPC":"IAAg1CgAgFKJEoBS6BMAuekHAPlIAIBS6AMAOcAnAJAAkByRwycAkA=="}, "bootSessionUUID" : "64CB501C-6A43-40B3-8730-6EA521836CCB", "sip" : "enabled", "exception" : {"codes":"0x0000000000000001, 0x00000001b02711f8","rawCodes":[1,7250317816],"type":"EXC_BREAKPOINT","signal":"SIGTRAP"}, "termination" : {"flags":0,"code":5,"namespace":"SIGNAL","indicator":"Trace\/BPT trap: 5","byProc":"exc handler","byPid":76245}, "os_fault" : {"process":"TaskTick"}, "extMods" : {"caller":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"system":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"targeted":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"warnings":0}, "faultingThread" : 0, "threads" : |
5
dcncy 2 天前
有点太多了,先不贴了。
|
6
gefangshuai OP @dcncy #5 请问 App 版本号是哪个版本?
刚开始确实有操作系统兼容性问题导致的闪退,后来优化后用户反馈解决了: https://github.com/lifedever/TaskTick/issues/1 |
7
gefangshuai OP @dcncy #5 感谢反馈,已经看到版本号了,1.1.0 版本应该是解决了,建议升级试一下。
|
8
dcncy 2 天前
@gefangshuai #6 我使用 homebrew 安装的,是 1.0.7 版本。已从 github 下载 1.1.0 版本,确实可以了。有劳了
|
9
dcncy 2 天前
调度机制能否添加一个:系统启动后执行 ?
|
10
gefangshuai OP @dcncy #9 是指不打开 App 就能自动后台运行吗?开机就能自动运行?不依赖于 App 是否打开吗?
|
11
OliverDD 2 天前
反馈下前端问题。暗黑模式“下载”和“star”按钮都是白色底色看不见
|
12
gefangshuai OP @OliverDD #11 收到,谢谢反馈
|
13
Astralume 2 天前
好东西,点赞!
|
14
gefangshuai OP @Astralume 感谢
|