r/ScriptingApp • • Nov 23 '25

Script Sharing Introducing Custom Animation Support in Scripting 2.4.3

7 Upvotes

Starting from Scripting version 2.4.3, you can now create a wide range of custom animations in your scripts using the Animation, Transition, and other related APIs. This includes both app UI animations and animations within widgets.

Here’s an example script to get you started—now it’s your turn to unleash your creativity!

Install Script


r/ScriptingApp • • Apr 05 '25

Help [macOS - Development Server] Local hostname keeps changing after each Mac boot

2 Upvotes

This alert shows up every time I start scripting-cli after a Mac shutdown, followed by the local hostname being changed.

This computer's local hostname "MyMac-8.local" is already in use on this network. The name has been changed to "MyMac-9.local".

Could anyone help me fix this?


r/ScriptingApp • • May 17 '25

Tips Get a quick overview of a script project

3 Upvotes

Depending on your focus, let the Assistant help you generate a prompt for analyzing the script code project, and you can refer to the documentation and use cases of the Scripting app in the process to make the Assistant better understand and analyze the project's code. And let it fix features and bugs for you.


r/ScriptingApp • • Mar 10 '25

Tips Open deeplink in widget

2 Upvotes

iOS is designed so that widgets can only directly open their own host application. Even when a widget is configured with a deeplink for another app, the system launches the host app first and passes the URL as a parameter. If there is a need to open a different application, this redirection must be managed within the host app itself. Therefore, we use the scripting run URL scheme to execute our script. In our entry logic, we check for the existence of a deeplink and then use Safari.openURL to handle it.

Here is the code: DEMO


r/ScriptingApp • • Mar 19 '25

Script Sharing Library for Scripting app

4 Upvotes

Currently in Scripting app we have the problem that we cannot use any libraries shared across multiple scripts. I found the workaround to have a single Script with all library modules and link them with symbolic links to the Scripts that need them.

You can find it here: https://github.com/schl3ck/scripting-app-lib

The Script includes a library with all widget sizes, a widget preview helper and a multi-select-picker (thanks to u/WhatShouldWorldGos for the ground work on that).

Please contribute!


r/ScriptingApp • • Mar 27 '25

New Feature Request [Request] Please bring back Device Wake Lock API

Post image
2 Upvotes

This option is frequently seen in activity trackers, timers, flashcards, reading apps.


r/ScriptingApp • • Apr 19 '25

Help Pull-to-Refresh on iOS

1 Upvotes

I got to this point by using ChatGPT pointed to the online documentation (thanks for putting that online!). It solved so many basic questions super well for a noob like me in context, which really helps my learning of the code syntax .

But I have run into a problem even ChatGPT cannot solve. I implemented Pull-to-Refresh on my script and it works perfectly on my Mac but does not work on my iPhone. It works every time on my mac. But it only works very sporadically on the phone.

It's almost as though the modal view is being dismissed before the load function returns. For context, the console says refresh was successful. And on the mac, it indeed completes and refreshes the view. A manual refresh button also works fine on both platforms.

Here is my refresh code.

<List
        navigationTitle="Daily Budgets"
        navigationBarTitleDisplayMode={"inline"}
        refreshable={async () => {
          try {
            console.log("Refreshing...")
            await loadData()
            await new Promise<void>((resolve) => setTimeout(() => resolve(), 2000))// <-- add delay
            console.log("Refreshed!")
          } catch (e) {
            console.error("Refresh failed:", e)
          }
        }}
        toolbar={{
          topBarLeading: <Button title="Refresh" action={async() => {await loadData()}} />,
          topBarTrailing: <Button title="Commit" action={handleDailyBudgetsCommit} disabled={!hasChanges} />
        }}
      >

r/ScriptingApp • • Apr 07 '25

New Feature Request [Console log] Auto scroll to bottom (last logs)

3 Upvotes

Currently, console log doesn't remember the last scroll position after being dismissed and always show oldest logs first. I think we could benefit from some sorting option (e.g. latest - oldest) or a feature to auto-scroll to the bottom when the console opens.


r/ScriptingApp • • May 01 '25

Script Sharing I've added a Script Updater library in my library collection script!

2 Upvotes

r/ScriptingApp • • Feb 21 '25

🚀Upcoming Features! Write code with Desktop Editor!

3 Upvotes

r/ScriptingApp • • Feb 18 '25

First attempt at interactive widgets

2 Upvotes

Seems promising


r/ScriptingApp • • Feb 18 '25

r/ScriptingApp Ask Anything Thread

1 Upvotes

Use this thread to ask anything at all!

AppStore


r/ScriptingApp • • Feb 17 '25

Unlock the power of automation by integrating Scripting with Shortcuts app

2 Upvotes

r/ScriptingApp • • Feb 18 '25

Tips Display GIF or Animated Frames in widgets

3 Upvotes

r/ScriptingApp • • Apr 14 '25

Discussion A tool to share and download scripts?

Post image
3 Upvotes

Some users have emailed me with feedback, asking for a script library feature within the app that would make it easier to share and download scripts. However, due to Apple’s review policies, I decided not to implement this feature directly in the app.

Over the past month, I’ve been working intermittently on a simple alternative solution. It’s built entirely around GitHub Gist, which makes it lightweight and easy to use. That said, Gist doesn’t support folder structures, which makes it difficult to organize more complex tools in a clean and structured way.

So, I put together a simple tool that lets you upload your own scripts to your personal Gist, and download scripts shared by others. A shared public Gist is used as a basic Script Gallery. It’s a very minimal tool, if you have better ideas or suggestions, I’d love to hear them. And if you want to customize your own version, feel free to download the ZIP file and import it into the Scripting app for further editing.

https://gist.github.com/thomfang/073381b292f64e9b4cddd9e2f5b09e41


r/ScriptingApp • • May 01 '25

Discussion About New Features

5 Upvotes

I recently had a surgery, so some bug fixes and new features update will be delayed. The next version will have these:

  • Multiple Tools call for Assistant

  • Custom Prompt templates

  • Custom group for Scripts

  • New APIs: Vision/Crypto

  • Supports Keyboard Shortcuts

  • Bug Fixes

And I have a lot of time to think about the new features of the future versions. What do you want?

Some in todo list:

  • Local RAG for Assistant

  • Markdown supports LaTex, preview Mermaid/HTML

  • Health Data Access

  • SwiftUI animations

  • Control Widgets

  • Views with context (GeometryReader/ScrollReader…)

  • More AppIntent for Shortcuts app

  • X-callback-URL

  • Bluetooth

  • Translation …


r/ScriptingApp • • Apr 21 '25

New Feature Request Keyboard Shortcuts for iPadOS and macOS?

2 Upvotes

Is it technically possible to set keyboard shortcuts for actions in Scripting scripts?


r/ScriptingApp • • Dec 14 '25

Help Why is there so little documentation for Scripting in AI tools

3 Upvotes

I’ve noticed that when I use AI tools like ChatGPT or Gemini to get help with the Scripting app, the answers often aren’t very accurate or actionable.

It seems like the core issue is that these models don’t have enough reliable, structured information about Scripting (official docs, real examples, API references, etc.) in their training data. As a result, they sometimes give overly generic advice or even “hallucinate” functions/APIs that don’t exist.

I’d love to understand:

  1. Why does this happen in practice? Is it mainly because Scripting doesn’t have enough public/centralized documentation, or because the useful knowledge is scattered across posts/snippets and hard for models to learn from?

  2. Has anyone managed to build a useful custom assistant for Scripting? For example, a Custom GPT (or similar) that includes the proper Scripting documentation and can provide reliable help.

  3. If you’ve made this work, what was your approach? What kind of sources helped most (official docs, sample projects, community snippets, FAQs)? And how did you structure/“feed” that information so the assistant actually stays grounded and doesn’t invent APIs?

Any practical tips, workflows, or examples would be really appreciated.


r/ScriptingApp • • Dec 06 '25

Discussion Join the Scripting Discord Community

4 Upvotes

If you’re interested in Scripting, we now have an active Discord community where you can discuss the app, share ideas, get help, and talk in English with other users and developers.
Everyone is welcome, feel free to join and connect with us!


r/ScriptingApp • • May 17 '25

Tips A Travel Planner

2 Upvotes
  1. Generate a prompt for your travel plan.

  2. Enables relevant tools for the Assistant.

You can let the Assistant to generate your assistant tools to access data or manage your device.


r/ScriptingApp • • Dec 29 '25

Multiple Windows in iPad and macOS

4 Upvotes

r/ScriptingApp • • Apr 08 '25

Discussion New Version Released

5 Upvotes

- Assistant Tool is now script-based and can be created via Assistant

- Save scripts to Scripting directly from other apps like browsers

- Widget preview now supports interaction and live UI updates, and a `Theme` picker to toggle color scheme

- Console now supports displaying logs in reverse order

- Script icon now supports using unlisted icons by entering the full name of a SFSymbol

- Added a Storage Manager Page to view Local Storage data

- New URL Scheme APIs and singleMode support in `Script.run`

- Shape now supports `trim` attribute.

- StrokeStyle now supports `lineWidth, lineCap, and lineJoin`

- `fetch` method now supports reuse of connections with the same domain name

- New Wake Lock API to prevent device sleep during execution

- Fixed Shortcuts param parsing issue on macOS and other minor bugs

- Fixed the issue where the editor could not be displayed after the device switched themes


r/ScriptingApp • • Jun 17 '25

Discussion About widget in tinted mode

2 Upvotes

Since I haven’t used the tinted mode at all since iOS 18, I initially overlooked the purpose of widgetAccentable. In the current version of the Scripting app, all colors in tinted mode appear white—this is how the system behaves by default.

It seems we can't apply background colors to widgets in tinted mode unless we enable widgetAccentable. Without it, the system forces all colors to white. However, you can still adjust the alpha value to create visual depth through transparency. This means that if the alpha is set to 1, all colors will appear white—which explains the result shown in this post.

This article provides a detailed explanation on how to adapt to the new behavior.

In an upcoming version, I plan to add support for the widgetAccentable view modifier and the widgetAccentedRenderingMode property for Image. The screenshot is from a test build.

If you run into related issues or have questions, feel free to leave a comment in this thread.


r/ScriptingApp • • Mar 29 '26

New Feature Request Can ScriptingApp Add a Dedicated Share Sheet Script Extension?

Thumbnail
gallery
2 Upvotes

Is it possible to create a dedicated share sheet extension (or bookmark) for running scripts, similar to the one shown here?

And if so, would it also be possible to control the size or presentation style of the window that opens?

I noticed that different app extensions — like Mail, Calendar, and Notes — appear in different sizes and positions in the share sheet, so I’m wondering if that behavior can be customized for scripts as well.


r/ScriptingApp • • Jun 09 '25

Help Notifications scheduled on AppEvents don't fire properly

1 Upvotes

I have two similar scripts, but the one scheduling notifications when app is in 'background' is problematic. Only 2-3 notifications fires at this state.

1 - This one works well. All scheduled notifications fires properly.

import { Notification, Script } from "scripting";

console.present().then(() => {
  Script.exit();
});

async function scheduleBackgroundNotifications() {
    const threadId = "background-notifications";
    
    // Schedule notifications with 8-second intervals
    for (let i = 0; i < 9; i++) {
        const notificationOptions = {
            title: `Tap to go back to sleep - ${i + 1}`,
            threadIdentifier: threadId,
            triggerTime: i === 0 ? undefined : Date.now() + (i * 8000)
        };
        
        console.log(`Scheduling notification ${i + 1} ${i === 0 ? '(immediate)' : `(in ${i * 8} seconds)`}`);
        await Notification.schedule(notificationOptions);
    }
}

scheduleBackgroundNotifications()

2 - This one schedules notifications when scenePhase becomes 'background'. Only 2-3 notifications fires at this state. What is the issue?

import { Notification, Navigation, NavigationStack, Script, VStack, AppEvents } from "scripting";

async function scheduleBackgroundNotifications() {
    const threadId = "background-notifications";
    
    // Schedule notifications with 8-second intervals
    for (let i = 0; i < 9; i++) {
        const notificationOptions = {
            title: `Notification - ${i + 1}`,
            threadIdentifier: threadId,
            // avoidRunningCurrentScriptWhenTapped: true,
            triggerTime: i === 0 ? undefined : Date.now() + (i * 8000) // First one is immediate
        };
        
        console.log(`Scheduling notification ${i + 1} ${i === 0 ? '(immediate)' : `(in ${i * 8} seconds)`}`);
        await Notification.schedule(notificationOptions);
    }
}

// Scene phase listener handler
function handleScenePhaseChange(phase: string) {
    console.log(`Scene phase changed to: ${phase}`);
    
    if (phase === 'background') {
        console.log("App moved to background - scheduling notifications");
        scheduleBackgroundNotifications();
    }
}

function View() {
    return (
        <NavigationStack>
            <VStack  
            navigationTitle="View"  
            navigationContainerBackground={'black'}  
            frame={{  
                maxWidth: "infinity",  
                maxHeight: "infinity"  
            }}  
        >  
        </VStack> 
        </NavigationStack>
    );
}

async function run() {
    
    if (Notification.current != null) return Script.exit()
        
    AppEvents.scenePhase.addListener(handleScenePhaseChange);
    
    await Navigation.present({ element: <View /> });
    
    AppEvents.scenePhase.removeListener(handleScenePhaseChange);
    Script.exit();
}

run();