#development

1 messages · Page 248 of 1

marble perch
#

The bugs are the same every year with new os releases. Bad battery, memory leaks, etc

#

Just QC issues

#

People just love to cry about things

grim sparrow
#

idc about those, I more mean things like buttons just not working in settings

#

mostly ui bugs

#

(in mostly swiftui apps but again, not my point)

marble perch
#

Ahh swiftui moments

grim sparrow
#

I think SwiftUI will be a viable option when you can open an app and not immediately tell that its written with SwiftUI

#

because it just has so many tells, like slightly stuttering lists or buttons not being perfectly aligned

gentle grove
#

Upgrade to C++23 so you can get the new slop but I forgot what specifically

grim sparrow
#

Yeah I would always use the latest C++ version when I’m starting a project

#

Clean slate so no code to fix

magic hazel
#

It’s not in the public beta?

grim sparrow
#

It was added in the most recent dev beta

#

I don’t think it’s in public

magic hazel
#

Ah alr

#

I should not have updated

grim sparrow
#

Typically public is the last dev beta with critical fixes

magic hazel
#

This beta is so much slower and looks so much worse and is so much buggier

floral notch
#

update: dont know if anyone cares (im mostly just writing this so i can reference it in the future) but the 3rd one is the best, and super easy to vendorize due to the codebase structure and that it is MIT licensed. there hasnt been any development in over a year but i would consider OCMethodTrace to be a complete project more or less, on iOS at least. it doesn't really need maintenance

my only complaint is that it is heavily tied to iOS. OCMethodTrace.m, which is the meat of the code, has #import <UIKit/UIKit.h> at the top and you cannot simply comment that out since it hard codes support for UIEdgeInsets, UIOffset, CGRect, etc. however, that file is only 1KLOC so i imagine it will be pretty straightforward to remove the hard dependency on UIKit (probably would take a day or so) and eventually port to other platforms like GNUstep / Linux (which would probably take a week).

in a pre-ChatGPT era i would have complained about the docs/comments being in chinese but that can be one-shot in the fucking head with a prompt like "translate the comments in this code to english" or "translate this markdown to english"

tepid nacelle
#

its made by the chinese its chinese spy propaganda /j

pearl sail
#

Until

floral notch
#

i am chinese so its ok

tepid olive
floral notch
#

我是中国人

#

我爱习近平

#

taiwan is china

tepid olive
grim sparrow
magic hazel
#

That's actually going to be incredibly useful for my backports

#

All the way back to 2015 as well!

magic hazel
#

I mean it's useful either way

#

But yeah it was definitely screaming react 💀

wooden yarrow
#

also if you scroll too far up you get flashbanged

native dune
#

you can tell its ai by the gradients

hexed knot
#

It's the colors man

magic hazel
#

what's the best mach-o decompiler?

light owl
sonic totem
magic hazel
#

thats what im trying rn

#

surprisingly it's quite excellent

#
UIVisualEffectView__whatsWrongWithThisEffect```

LOL
harsh junco
frank fossil
#

Who’s interested in getting amfid/launchd task port on iOS 17.0?

trail nimbus
frank fossil
#

jelbrek

trail nimbus
#

Jelbrek always good

cinder frigate
frank fossil
#

Might be a bit more than semi jb if platformizing via amfid is still feasible

cinder frigate
cinder frigate
frank fossil
#

Chance that it might be possible to inject system wide, but in a limited form since there is no PPL bypass to enable JIT (or that all binaries needs to be resigned to enable JIT)
-# JIT in this context is meant for tweaks putting in-memory hooks that would otherwise trip codesigning

cinder frigate
frank fossil
#

should work

cinder frigate
quaint rain
frank fossil
granite frigate
gentle grove
#

Wait until this guy finds out about dlopen()

granite frigate
#

im kind of impressed the interpreter like rescans the venv for packages

gentle grove
#

I think it just scans at import time but I could be wrong

cloud yacht
#

idk how python works but js and lua just lookup when you import and then cache the import. No need to lookup everything if your not going to import eveyrthing

wooden yarrow
timid furnace
#

iirc it's just direct children of everything in sys.path

#

that's not that many locations to check

magic hazel
#

anyone know how to resolve this

My target is macOS 15 so I'm incredibly dumbfounded as to why this is occuring

grim sparrow
magic hazel
#

Ugh so it means forking time

#

I gave up on it anyways now I'm banging my head against a wall about how to manage these freaking data structures

frank fossil
magic hazel
grim sparrow
magic hazel
#

and i was trying to make member objects

#

you can't inherit from a struct so i had to make a protocol which is messy since i didn't really want that plus it meant i had to add a user sub object to compare since members aren't users they're user protocols etc

#

whereas if i use classes, i can have a base class of a user, then a member class that is a user but has extra stuff, a client user class that is also a user but has extra stuff

#

might end up going back to structs though

cinder frigate
#

I imagine this has already been discussed, but I don't know how to search for it, so I'm asking.
Since we spawn a custom launchd, are there technical limitations that prevent semi-jb like serotonin or Nathanlr from using a technique similar to the one used by dopamine to put all executables in the trust cache, to instead signing them on the fly? Perhaps by checking that they are not already signed.

#

For "the dopamine technique" I mean the one explained in this video (link with timestamp included)

Apple has heavily cracked down on Kernel post exploitation with features such as

  • Kernel Patch Protection (KPP/KTRR)
  • Pointer Authentication (PAC)
  • Page Protection Layer (PPL)

Bypasses for some of these features are now required to gain the desired level of control over the operating system.

This talk aims to provide an up-to-date high leve...

▶ Play video
sonic totem
cinder frigate
sonic totem
#

If it wasn’t in the trustcache the system would just reject it, because it would have no way of knowing if it was trusted or not

cinder frigate
sonic totem
#

No, the trustcache check comes first

#

If that fails, it moves to CoreTrust

cinder frigate
sonic totem
#

Well, do you understand what the trustcache is?

#

It’s essentially meant to be a list of CD hashes for Apple binaries on the system

#

That the kernel knows it can implicitly trust to run

#

Dopamine uses its PPL bypass to add CD hashes to this list, that’s why it can bypass codesigning

#

If the binary wasn’t in trustcache, the kernel would get its CD hash and not find it in the trusted list, so would reject it

cinder frigate
#

Sorry if my first question wasn't clear

sonic totem
#

Ah, then no

#

Well, Serotonin does bypass codesigning, but with a CoreTrust bypass

#

There used to be a way to attach a signature purely in memory and not be re-signing the file

#

But now that required at least a kPAC bypass

grim sparrow
#

And now we need MTE proof exploits woeis

wooden yarrow
cinder frigate
magic hazel
wooden yarrow
cinder frigate
magic hazel
#

How get Apple off my system

sonic totem
#

Dopamine won’t sign anything

#

It just adds CD hash to trustcache if the binary is signed

cinder frigate
# sonic totem What do you mean?

You said

Well, Serotonin does bypass codesigning, but with a CoreTrust bypass
There used to be a way to attach a signature purely in memory and not be re-signing the file
So my question was, is re-signing the file bad / impossible (for serotonin)? (taking into account the caveats I had put in parentheses)

frank fossil
sonic totem
cinder frigate
sonic totem
#

You need to ad-hoc sign it

#

ldid -S <file>

cinder frigate
cinder frigate
sonic totem
#

You shouldn’t have to

#

RootHide is RootHide

sonic totem
#

Like, you’d have to sign with no entitlements

#

And you’d have to depend on ldid being installed on the device

#

It should be the user’s responsibility

cinder frigate
cinder frigate
cinder frigate
cinder frigate
naive kraken
#

and I'm pretty sure that breaches it's license

sonic totem
#

There isn’t a predefined list

#

And you shouldn’t give all entitlements to all binaries because then all binaries get permissions they shouldn’t have

#

And yeah as opa said, ldid should not be preinstalled 😛

sonic totem
#

If not then it’s bad design

cinder frigate
sonic totem
#

It just adds CD hashes to trustcache

#

Signing and entitlements is the user’s responsibility

#

But in regards to signing with all entitlements by default, I more meant that giving every binary as many entitlements as possible is very very insecure

rocky oriole
#

Idk what you mean, I love giving my random calculator app I found camera and microphone access

grim sparrow
cinder frigate
sonic totem
#

It should just re-sign with the bypass before spawning

cinder frigate
hasty ruin
#

it downloads it at runtime

#

it doesn't get shipped with trollstore

sonic totem
#

The license just prohibits distribution

grim sparrow
pearl sail
grim sparrow
#

Procursus ldid is the only version that matters anymore

pearl sail
#

Let me fork it to make a version out of rust that two people may use but I will update via vibe code every 2 years

magic hazel
grim sparrow
#

anything you bundle it with has to be the same license

#

its a virus

#

if you are just providing a dl link ur probably fine

#

as long as you also include a cop y of the license

vague parrot
#

is there same as trollstore app, but can work on ip16pm?

rocky oriole
vague parrot
#

aight

rocky oriole
vague parrot
#

okay

naive kraken
grim sparrow
#

i guess

#

im an engineer not a lawyer

#

and besides, I doubt Saurik would care atp

rocky oriole
grim sparrow
#

not to my knowledge

#

the last I heard he was hacking ethereum

pearl sail
#

methereum

hollow oar
#

Meth!

rocky oriole
grim sparrow
magic hazel
#

Why is CAFilter still a private API even when it’s remained unchanged for so long and is still quite useful?

#

Is there any specific reasoning behind it?

hasty ruin
grim sparrow
#

Real

hexed knot
#

Lmaoo I forgot about meth development

tropic sail
#

Anybody knows anything about X-Apple-ActionSignature and how it works?

#

I mean, how it is being generated. We need info about it, because there is an issue with logging in Apple ID account in iTunes Store/App Store on iOS 5.1.1 since spring 2025. After researchers, it was discovered that iOS 5 and below iTunes Store clients were using GET method to log in, and starting from iOS 6, it started using POST method to log in. And in spring 2025 Apple killed GET api, so it is not possible to log in iTunes Store/App Store unless you convert GET request to POST using proxy, but the thing is that it requires X-Apple-ActionSitnature, that iOS 5 and below clients were not generating. So now as we can see the only way to fix it is too convert GET request to POST and try to “teach” iOS 5 generate that signature, or something like that.

#

That is why I am asking

grim sparrow
wooden yarrow
#

@torn oriole another one for the filters

fluid lintel
#

https://github.com/StephenDev0/StikDebug?tab=readme-ov-file

Hi, I was analyzing this tool thinking I could enable JIT even on apps downloaded from the store, but unfortunately it seems that it only works with apps that are being debugged or sideloaded. My idea was to be able to analyze an app without having to re-sign it, because re-signing the app often causes the loss of the original entitlements (keychain, iCloud, etc.) and often requires a binary patch to avoid crashes. Do you have any advice?

GitHub

An on-device debugger/JIT enabler for iOS versions 17.4+, powered by idevice. - StephenDev0/StikDebug

granite frigate
#

there’s ellekit jitless but it’s only limited to 8 breaks i think

#

oh 6*

fluid lintel
#

But doesn't it need to be jailbroken to work?

slim bramble
#

No

fluid lintel
#

However, it only works for an app that has this code inside it.

fluid lintel
#

Iphone 11 iOS 26

tepid olive
fluid lintel
#

What do you mean? Has iOS 26 introduced further restrictions?

slim bramble
#

Here is JITLess ellekit

fluid lintel
#

Ok but only for jeilbroken device

fading shell
#

<@&355174844205367317>

kind herald
#

Machine

magic hazel
grim sparrow
#

<@&355174844205367317>

north lance
#

That was quick

grim sparrow
#

third ones the charm

magic hazel
#

crazy

magic hazel
#

any way of recieving touch events outside the bounds of a view, clip to bounds wont work

hasty ruin
#

hitTest maybe

grim sparrow
#

My immediate reaction would be no, the event would go to whatever view you actually pressed

#

What’s your use case here, just from that description it sounds unintuitive

frank fossil
#

are you okay with having the view completely hidden instead

magic hazel
#

Only the part hanging in gets touch events

grim sparrow
#

Just give the view a container view that’s invisible

#

And that container view can listen for events

thorn ether
#

anyone know how I can set custom paths for Shortcuts?

#

currently it uses /var/jb/usr/bin/ but i want to add another path

#

nvm figured it out. put paths in /private/var/root/.bashrc

ocean raptor
grim sparrow
marble perch
magic hazel
#

is limneos down again :/

#

i should try backing it up

torn oriole
#

shocker, annoying repo outage

lean forge
#

found something called tightbeam_stub inside my iphones filesystem

#

its a unix executable

#

anyone know what it does?

wooden yarrow
# lean forge found something called tightbeam_stub inside my iphones filesystem
#

specifically 7.10

lean forge
#

was just confused about it cuz I couldnt find anything about it

untold drift
#

hi guys, is there any alternative MSHookFunction for sideloaded app's tweak? (livecontainer)

indigo kraken
untold drift
#

i just wanna call a function in app's framework :/ is it impossible on sideloaded? i can get address with dlsym

grim sparrow
#

If you can get the address then you can just call it

#

Hooking is for overriding what a function does

untold drift
#

yea i know but i dont want to more change on my code 😄 im trying to pointer to cast a func now.

radiant idol
#

may you provide some code as to what you're doing? that may help

grim sparrow
#

Or what your goal is. If the framework you’re calling is open source or publicly documented you may just be able to call it normally

untold drift
#

long long (*orig_getData)(const char *str);

thats the function i wanna call. i hooked and logged some data when jailbroken but im not jailbroken now. just wanna call sometimes. its enough for now

#

when i get symbol with
void *dataFunc = dlsym(RTLD_DEFAULT, "getData");

its returns an address (pointer)

#

just i will cast it and work i think 😄

radiant idol
#
long long (*orig_getData)(const char *str);

// ...
void *dataFunc = dlsym(RTLD_DEFAULT, "getData");
orig_getData = (typeof(orig_getData))dataFunc;

I think this should do it

untold drift
#

i cant see crash logs but crashing. i will try your code o/

radiant idol
#

make sure the pointer is valid though

grim sparrow
#

Crashing would usually mean the pointer is nil or one of your function signature is incorrect

untold drift
#

yea, maybe i need to debug it

grim sparrow
#

As a first step I’d just print the value of dataFunc

#

See if it’s 0x0 or it actually found it

untold drift
#

no, i did it. return an address with 0xdeadbeef etc

#

i just upgrade my ios for whatsapp :/ i love jb community but bad times.

radiant idol
#

nice!

magic hazel
#

does ios crash out if you lipo together 2 different binaries

#

as in one built by xcode 13 and one built by xcode 14

grim sparrow
#

I’m pretty sure someone figured out the way to do it so it does work

light owl
#

Developers my buddy @native dune has a question

native dune
#

Nah its working

grim sparrow
#

@native dune what’s your question

native dune
#

Nothing i was wondering how to inject into a platform binary but i ended up disabling amfi

kind herald
#

/dev/apple_mfi

— 8:15 PM
Developers my buddy @#maxinedemoted has a question
#maxinedemoted

— 8:16 PM
Nah its working
amler #promotemaxine

— 8:25 PM
@#maxinedemoted what’s your question
#maxinedemoted

— 8:26 PM
Nothing i was wondering how to inject into a platform binary but i ended up disabling amfi

light owl
native dune
#

Absolutely

light owl
#

Precious time that you could be spending on The Method instead

native dune
#

I just wanna see it work

visual meadow
#

Anyone know why this happens? I can't ssh in on 17.0

#
nathan@Nathans-MBP ~ % ssh root@192.168.1.133
Warning: Permanently added '192.168.1.133' (ED25519) to the list of known hosts.
root@192.168.1.133's password:
shell request failed on channel 0
nathan@Nathans-MBP ~ %```
#

Same stuff works on 16

velvet path
indigo kraken
#

nvm it must be if the client is being rejected

visual meadow
#

spawns when i ssh in exits when i enter password

#

17.0 really changed a lot lol

timid furnace
#

run with -v...

#

and check sshd logs

cosmic briar
#

does anyone know any reasons why SpringBoard crash reports wouldn’t be generated after crashing into safe mode? someone is facing a safe mode issue when using my tweak but they have no crash reports neither in Settings nor in Cr4shed and this has always been an issue for them apparently anytime they have a crash problem

#

I was thinking maybe they disabled crash reporting in icleaner or have too many logs but idk if there are other reasons

sonic totem
#

They got hacked by a nation state and the spyware disabled crash logs 🗣️

acoustic imp
radiant idol
visual meadow
#

sshd is exiting with signal 2

grim sparrow
#

Did palera1n have any specific issues / patches?

timid furnace
visual meadow
#

Issue is when I run it like that it gets further

#

Like it doesn't even generate the keys when its ran by launchd

#

But when i run keygen wrapper manually it generates the keys

timid furnace
#

edit the launchdaemon plist to add verbose flags, edit the sshd config to add verbose flags, try to get as much logging as possible

visual meadow
#

is roothides forkfix broken on 17

unkempt magnet
#

So you have issues running ssh because sshd running abnormaly, right?

visual meadow
#

yes

#

It works fine on 16 though which is odd

velvet path
#

(either that or another set of entitlements are required)

visual meadow
#

bash seems to crash with this when i run it in newterm

#
Thread 0 name:   Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib                   0x1f7c4075c __kill + 8
1   bash                                     0x104d9ba08 0x104d58000 + 277000
2   bash                                     0x104d9bc74 termsig_handler + 444
3   bash                                     0x104d9b56c termsig_sighandler + 144
4   libsystem_platform.dylib                 0x21a1a1888 _sigtramp + 56
5   libreadline.8.2.dylib                    0x104f2a4fc _rl_init_locale + 228
6   libreadline.8.2.dylib                    0x104f11d18 _rl_init_eightbit + 24
7   libreadline.8.2.dylib                    0x104f13f34 rl_initialize + 244
8   bash                                     0x104da52d0 initialize_readline + 920
9   bash                                     0x104dd40f0 0x104d58000 + 508144
10  bash                                     0x104dd971c 0x104d58000 + 530204
11  bash                                     0x104dd6f28 0x104d58000 + 519976
12  bash                                     0x104d98a08 yyparse + 544
13  bash                                     0x104d98744 parse_command + 372
14  bash                                     0x104d981d0 read_command + 268
15  bash                                     0x104d9841c reader_loop + 504
16  bash                                     0x104dbebf4 main + 5180
17  dyld                                     0x1d3877d44 start + 2104

but this happens in both 16 and 17

unkempt magnet
#

or just C

languid sonnet
acoustic imp
magic hazel
#

is jsonencoder/decoder faster than jsonserialisation

ocean raptor
grim sparrow
#

It’s incredible

magic hazel
#

already looked at it

grim sparrow
#

You can back port it so easily

#

It’s just a wrapper of a c library

magic hazel
#

why would it specifically be iOS 11+ though

#

before that it was iOS 10+

#

Which is rather odd

#

Usually it goes 8+ 9+ then 12+ or 13+

grim sparrow
#

actually idk if you could cause it uses simd

magic hazel
#

yeah right thats why

#

oh no

#

bruh

grim sparrow
magic hazel
#

simd is swift

grim sparrow
grim sparrow
magic hazel
#

lmao

grim sparrow
#

my brother in Christ simd refers to a technology, that’s a wrapper of the c library

magic hazel
#

its also built into the stdlib

#

ive used it before on ios 6

grim sparrow
#

I’m pretty sure you could get simdjson to compile for iOS 6

#

it’s a c library

#

used by fucking everything but apples jsondecoder (except in newer iOS)

magic hazel
#

oh

grim sparrow
#

jsondecoder was baked in objc for the longest time and was a lot slower than any c or c++ alternative

magic hazel
#

nvm

#

yeah i see what you mean

grim sparrow
#

Because objc is objectively slow as balls in comparison to c++ or c

magic hazel
#

yeah that's probably not gonna backport

#

1.21mb header file

grim sparrow
#

ZippyJSON is just a Swift wrapper of simdjson, which is designed to be a universal C based json library

magic hazel
#

ill try

#

its really really big though

#

they re implement json serialisation

#

667kb file

#

if that uses a bunch of ios 11+ stuff it might be cooked

grim sparrow
magic hazel
#

mm

grim sparrow
magic hazel
#

compiling this will be slow as balls..

magic hazel
#

all my packages do

#

you just get a warning

#

who cares about that

grim sparrow
#

Not everyone likes that

magic hazel
#

¯_(ツ)_/¯

#

i mean if you're doing it on purpose then you don't really care to begin with

#

1.2mb of text to compile is really rough

#

sorry 1.8

grim sparrow
#

Good thing you’re not doing it by hand

#

And you have a thing called a computer which can compute incredibly quickly

magic hazel
#

a 2013 mac pro

grim sparrow
#

1.8MB of source is really not a lot for most projects

magic hazel
#

i mean my project is well beyond that

#

but it's 1 file

grim sparrow
#

the compiler doesn’t particularly care how many files it’s in

magic hazel
#

it seems to

#

hangs on huge files

#

even with the built-in xcode compiler

#

wait shite its targeting 5.7

#

why is it targeting 5.7

#

grr

grim sparrow
#

It optimises on a per module basis so if you’re using it as an spm package it will treat it as a separate module and it will take longer

#

Compiling is a great excuse to go and do something else with your life

#

I’ll hit go, know it’s gonna take 5-10 minutes and go and buy a monster from the store 💀

magic hazel
#

hmmmm

grim sparrow
#

Oh I might know why

magic hazel
#

y

grim sparrow
#

Oh nvm I was gonna say so it can add visionOS as a target but it just doesn’t

#

lame

magic hazel
#

lmao it builds

#

thing is i dont actually use jsondecoder rn

#

i use jsonserialisation

#

time to see if merely having the library causes a crash

grim sparrow
#

It’s just generally a lot nicer to work with in the long run

#

And can be more performant

#

(In certain situations)

magic hazel
#

Its a lot more cumbersome and it’s slower however I’m hoping this library will fix the later

#

It takes twice as long to get into the app when using decoder

#

(Unless you’re on iOS 17+)

grim sparrow
#

This should help that a lot

#

The funny thing is JSONDecoder is backed by JSONSerialisation, the difference is JSONDecoder will only decode the keys you’re asking for whereas JSONSerialisation will just get everything all at once

magic hazel
#

It can’t just be as good as serialisation though it has to be much better to justify it

grim sparrow
#

it’s not using objc what more do you need

magic hazel
#

Since conforming to codable is a royal pain in the ass

magic hazel
#

Codable inits for big objects is like rewriting the entire class

magic hazel
#

I looked at the open source foundation

#

Pretty funny

slim bramble
#

I'd love to know how much of Swift's foundation is backed by objc

magic hazel
#

On Linux however most of it is entirely Swift

#

And works mostly the same

#

Kinda funny

slim bramble
#

Could prolly be checked easily by analyzing the dsc

#

but cba to write a script

magic hazel
#

The Stdlib is just an overlay of objc outside core types

#

Hence why it works on iOS 6…

slim bramble
#

swift is a joke

magic hazel
#

Swift is great

#

I would’ve quit all programming ventures on iOS if it weren’t for it

grim sparrow
#

Yeah

#

For objc interoperability on Apple platforms Swift uses the objc foundation types under the hood

#

But then on Linux it used the Swift version which has the same api and runs considerably faster

#

But they’ve done hella optimisation to make the Swift objc foundation work really well

#

If you don’t need the objc interoperability it mostly won’t use it

#

It will only invoke it when you try and pass it into an objc method

slim bramble
#

You know swift is a joke when only 5% Foundation's imports are actually swift

magic hazel
#

Yeah swift is held back by objc interoperability on Apple platforms

slim bramble
#

the rest is well, objc's Foundation or CF

grim sparrow
magic hazel
grim sparrow
#

It works

magic hazel
#

Only on apples platforms does it use objc

slim bramble
magic hazel
slim bramble
#

🤷‍♂️

magic hazel
#

They already did it for Linux

#

And it’s completely standalone

grim sparrow
#

But they would need to rewrite literally thousands of objc binaries

magic hazel
#

Ah true

#

Yeah right

#

Because so much bridges to objc types

#

Hell most UIKit does

grim sparrow
#

its so much easier for them to maintain the existing objc tech and write the new tech in swift

magic hazel
#

Scratch that basically all of UIKit does

slim bramble
#

The entirety of UIKit is objc

grim sparrow
slim bramble
#

exceptions

grim sparrow
#

(For SwiftUI compat)

slim bramble
#

Yeah

magic hazel
#

UIViewRepresentable?

grim sparrow
#

@magic hazel you know what would be a much much much funnier project

#

Making an objc api for SwiftUI

slim bramble
#

LOL

grim sparrow
slim bramble
#

Using based language for utter garbage

#

😭

grim sparrow
magic hazel
#

Funny ❌ impossible/awful/terrible/against design ✅

grim sparrow
#

What’s your reasoning

#

I like objc but I like Swift more

#

what’s your logic for thinking objc is better

slim bramble
#

Personal preference

grim sparrow
#

Fair

magic hazel
#

Yeah no fair enough

grim sparrow
#

But you can’t call Swift shit just because you don’t have a personal preference for it

#

You just don’t like it, doesn’t mean it’s a joke or shit language

slim bramble
#

The language maybe isn't bad, but it's implementation is

#

the toolchain is garbage too

#

🤷‍♂️

grim sparrow
#

There’s problems but objc had the same problems

slim bramble
#

At least binaries aren't 150MB

grim sparrow
#

New language features not being backportable

grim sparrow
magic hazel
#

Also the binaries aren’t that big what

#

The app might be because stdlib

grim sparrow
#

Pure Swift binaries that do the same thing as an objc thing are objectively smaller

grim sparrow
#

We can’t judge a language by shit devs who bundle half the world with their apps

slim bramble
grim sparrow
#

objc has the same problems

magic hazel
#

Idk anyone who turns that shit on

#

Except like

#

Embedded systems?

grim sparrow
#

Google

magic hazel
slim bramble
magic hazel
#

Google out here cooking up straight shit

grim sparrow
# slim bramble 🤨

it’s on by default but optional, Swift has been ABI stable since iOS 12.2 making dynamic libs possible

slim bramble
magic hazel
grim sparrow
#

see I think that’s insane

slim bramble
#

These people are sick

magic hazel
grim sparrow
#

C is perfect for embedded systems idk why people need to keep reinventing the wheel for it

magic hazel
#

I don’t agree with it

#

But if it works for them then go ahead

slim bramble
magic hazel
#

Nah C definitely wins on embedded systems

grim sparrow
#

Swift is designed to be a safe language, pointers open you up to incredibly unsafe behaviour, what’s the big deal

slim bramble
magic hazel
#

C code looks bad, low level code looks bad

grim sparrow
grim sparrow
magic hazel
#

Never seen good looking C code in my life

#

Except basic stuff

slim bramble
#

You get .pointee .makeCallable() and all those apis, that wouldn't be needed if you were using C. "neo-languages" aren't made for unsafe.

grim sparrow
slim bramble
grim sparrow
#

People over complicate it a lot of the time for no reason

magic hazel
#

I mean looks are subjective but imo it looks incredibly ugly

grim sparrow
#

9/10 if you need to use data pointers just use [UInt8] which the compiler casts to a pointer for you at compile time

slim bramble
#

If I used swift, I would need that for all my projects

grim sparrow
#

var eg = [UInt8](repeating: 1, count: 10)
memset(0, eg, 10)

#

you can use an unsafe pointer but there is 0 need to

#

and there’s 0 performance benefit to

slim bramble
magic hazel
slim bramble
magic hazel
#

There are 80 million different styles of C code you can write in or just make up your own on the spot

grim sparrow
grim sparrow
#

9/10 the address to it is done for you

magic hazel
#

There’s no proper guidelines as to what a C program should look like

slim bramble
grim sparrow
#

that’s my point

#

the compiler just does it for you

slim bramble
magic hazel
grim sparrow
#

Clang and gcc both have strong guidelines

#

Lookup clang tidy

slim bramble
#

clang tidy my beloved

grim sparrow
#

9/10 clang tidy can fix my obscure error

#

It’s magical

magic hazel
#

Why is it that every time I look at a different C repo that the codebase is structured completely differently, each file has been laid out completely differently, hell down to the way variables are handled can be vastly vastly different in the worst cases

#

Meanwhile C++ doesn’t have nearly the same problem

grim sparrow
#

Because people don’t follow the convention?

grim sparrow
#

The convention exists but people don’t follow it

magic hazel
#

Because the language doesn’t enforce it

grim sparrow
#

Every single damn language has that problem

#

what’s your point

slim bramble
grim sparrow
#

You could write the worst possible swift on the planet and it would still work

gentle grove
grim sparrow
gentle grove
#

name your variables in camel case and rustc will shoot you

magic hazel
slim bramble
grim sparrow
gentle grove
grim sparrow
#

In terms of usage

magic hazel
#

I don’t like rusts syntax or stdlib at all however I find myself agreeing with its philosophy a lot sometimes

grim sparrow
#

Oct 2025 over Oct 2024

gentle grove
#

as far as I'm aware rust is the closest to having a uniform style

slim bramble
#

Assembly to the moon

gentle grove
#

Rust is by far my favorite syntax

slim bramble
magic hazel
#

Rust syntax is just pure awful to look at

slim bramble
#

^

grim sparrow
#

@magic hazel have you ever ran swiftlint?

gentle grove
#

I don't care about aesthetics

#

I am a utilitarian

slim bramble
grim sparrow
gentle grove
#

It is very uniform and logical and autistic

magic hazel
slim bramble
#

bad idea

grim sparrow
#

How the fuck can you be on this argument that every code base looks different because nobody follows the guidelines when you don’t yourself

slim bramble
#

yeah 😭

grim sparrow
#

Default swiftlint rules

magic hazel
#

I’ll bet a grand I do too probably due to laziness but eventually I try and cleanup

#

I am actively aware of it though

#

And I don’t like it

grim sparrow
#

Then stfu about code bases not following guidelines😭 😭 😭 😭

magic hazel
#

It bothers me

#

Eve in myself

gentle grove
#

rootfs the type of maniac to use K&R function declarations

magic hazel
#

I’d like it if Swift got angry at me

gentle grove
#

C does have a fairly wide range of accepted styles

grim sparrow
#

FWIW I disagree with a lot of swift lints rules

#

but a lot of people do

#

There’s a reason you see temporary disable comments everywhere

magic hazel
#

Is swift lint something that runs during write time or compile time

slim bramble
grim sparrow
#

I don’t know how to answer that…

gentle grove
#

All linters and formatters ate run at what I call bored time: I only run them if I am bored

grim sparrow
#

Xcode is compiling frequently in the background to index, swiftlint rules can show up then

magic hazel
#

Write time

grim sparrow
#

but write time doesn’t really exist as a time?

#

I think?

magic hazel
grim sparrow
#

It runs before the compiler

#

And generates warnings

magic hazel
#

Hm it’s for Swift 6 it seems

magic hazel
grim sparrow
#

yes

magic hazel
#

Perfect

#

If I can find it for swift 5 I’ll start using it

slim bramble
#

@gentle grove what is the name of that style

int main(int argc, char *argv[]) {
  // Code
  return 0;
}```
magic hazel
#

Wild

slim bramble
slim bramble
#

GNU Style is mentally ill

gentle grove
#

mentally I'll

slim bramble
#

like why the fuck would you indent the curly brackets

magic hazel
#

Aw man it doesn’t like you using force casts?

#

But those are peak lazy 😔

gentle grove
grim sparrow
#

No because Swift style guidelines tell you not too

magic hazel
grim sparrow
#

Are you telling me your codebase doesn’t follow guidelines

magic hazel
#

But when I’m testing ! Is so much faster than full optional unwrapping

grim sparrow
#

Garbage

#

Trash

magic hazel
#

I end up replacing ofc

gentle grove
#

all the things in gnu style basically make sense but when you combine them all together, it turns into shit

grim sparrow
#

Unreadable

magic hazel
#

Bcus ! Is awful and unsafe

#

And gives crashes

#

All the time

grim sparrow
#

It only crashes if you’re wrong

magic hazel
#

Where payloads can in fact be nil

grim sparrow
#

So you’re wrong

magic hazel
#

And that’s fine

slim bramble
magic hazel
grim sparrow
#

Well

#

! Means “I’m right and trust me”

magic hazel
grim sparrow
#

Everytime it fails it means it were wrong

magic hazel
#

I guess so yes

#

I am wrong on behalf of the server not giving me what I expected

grim sparrow
#

I adore how this conversation has shifted from C sucks because people don’t follow the style guidelines to I don’t follow the style guidelines either but it’s ok because I know I don’t

magic hazel
#

C doesn’t suck C styling sucks

grim sparrow
#

Which is literally what every dev ever says

gentle grove
#

C
"THE" style guidelines

gentle grove
grim sparrow
#

Clang is the only one that matters

slim bramble
gentle grove
#

Idk what clang looks like

grim sparrow
#

Correct C

gentle grove
#

Is it like the normal thing rootfs sent

slim bramble
grim sparrow
#

Yes

gentle grove
#

that sounds good to me

slim bramble
#

Because it is good

gentle grove
#

I assume jwi meant more like the layout and structure though

gentle grove
#

The literal syntax is fairly similar among everything

grim sparrow
#

If you’re in c++ though it prefers

auto myfunc() -> uint8_t {}
over
uint8_t myfunc() {}

slim bramble
#

So we went from styling to layout and structure

grim sparrow
#

which I find funky

slim bramble
magic hazel
gentle grove
#

I thought it was supposed to be layout and structure from.the start

grim sparrow
#

Isn’t that what style guidelines are though

#

or at least, partly

gentle grove
#

Style guidelines are the syntax

#

not like how you structure your files and includes

magic hazel
grim sparrow
magic hazel
#

There are often naming conventions for files and file structure

slim bramble
#

So I just do that

gentle grove
#

"coop" rootfs is a dei nerd

grim sparrow
#

HAHAHAHAHAHA

slim bramble
#

C++ mfs trying not to use templates for a day challenge (impossible)

grim sparrow
#

But I also don’t use c++ that much

#

I use c mostly but with c++ libs

gentle grove
#

c++ users attempting to understand whether their object is uninitialized or not

slim bramble
magic hazel
#

I’ve never used templates in any language

gentle grove
grim sparrow
#

You’ve never used protocol in Swift????

magic hazel
grim sparrow
#

oh

magic hazel
#

I was confused for a second

gentle grove
#

I thought protocol was just swift equivalent of interfaces

magic hazel
#

Sry it’s like 12pm

grim sparrow
#

No c++ templates are the equivalent of protocols

grim sparrow
magic hazel
#

Why is using protocols bad 😭😭

grim sparrow
#

Protocol is fhe closest to an interface

gentle grove
#

What's the difference

grim sparrow
magic hazel
#

Ah ic

#

Ngl I don’t like protocols and structs very much

#

Idk why

#

Classes make my life easier

#

Mutability and inheritance is nice

gentle grove
grim sparrow
grim sparrow
#

That’s what objc treats it as

gentle grove
#

Wdym interfaces only refer to one specific class

grim sparrow
#

Like

magic hazel
#

It’s interesting how objc types are mostly all classes and then swift types are all structs

grim sparrow
#

It’s where you say what methods and variables an object would have

#

so in objc you would say @glossy jasper MyObject: NSObject

#

Somewhere in a header file

#

Lmao

magic hazel
#

I never liked that

gentle grove
#

Idk reading the swift page for protocol sounds exactly like an interface

gentle grove
grim sparrow
#

but then again objc is a special being

gentle grove
#

Maybe objc is weird

#

This wouldn't be what a c++ template itself does, but kinda a building block to making templates (or generics) useful

#

Because you need to be able to generalize wanting to have an object with "some behavior" and that's all you know about it

wooden yarrow
gentle grove
#

Wdym

wooden yarrow
#

because then the function wouldnt know what type the generic would be

gentle grove
#

Usually all templates are in a header so if you call a templated function, it can generate one with the concrete type

wooden yarrow
#

oh

#

but so like say a static library right

#

what if you expose a public template

#

or better yet a dynamic library

gentle grove
#

Like how

wooden yarrow
#

just by compiling as a library and exporting the function that uses the template

gentle grove
#

You can think of a generic as describing a family of functions "foo_something" where something is some arbitrary type (with some constraint like needing to implement certain methods, which are used in the function body)

wooden yarrow
#

no yes i know what a generic is

#

but like

#

how does cpp handle them when it cant decide on the concrete type upon compilation

#

i.e. can cpp even make a generic interface based just off ig something like traits

gentle grove
#

Like as in a trait object in rust?

wooden yarrow
#

yeah

#

or something

#

idk what cpp does

#

(will reply in 15 mins brb)

gentle grove
#

Idk if I quite visualize what you're saying

#

Neither a c++ template nor a rust generic have any form in the compiled output, like in a shared library

#

So if you want to handle arbitrary types then in rust you can easily just take a Box<dyn Trait> trait object, rendering a version of the "foo" designed for that box dyn trait

#

In c++ it doesn't really work right because usually you don't even use a trait or interface at all, you just literally call methods. If the method names don't exist, it fails to compile. If the methods are the wrong ones but happen to have the same name, your program behaves wrong or even is undefined

But I think the abstract base class, the c++ version of the interface, then would also work as your "trait object"

Something like that

#

The abstract base class would have all virtual methods so you'd just replace all the pointers in your implementor object

#

I think its something like that

slim bramble
gentle grove
#

C++ templates does it by duck typing while real languages like Java, Rust, etc are doing it through actual type theory solving

slim bramble
#

fr

light owl
#

@native dune is it working

shrewd smelt
gentle grove
#

It might help to re-remember how an "abstract class" (just a class where all methods are virtual/dynamic dispatch) is laid out, its just a bunch of function pointers

#

So I think the actual answer is, on the low level, the library provider would create an abstract class and publish the version of the method that uses that abstract class as the concrete type

slim bramble
#

Ever since I stopped doing java, I forgot all that stuff about inheritance 😭

gentle grove
#

Instead of creating an interface/trait and having the language create the trait object for you (with special syntax), you create that trait object yourself (the abstract class with virtual methods)

#

This exists in C too, a struct with function pointers as the members

#

You can do polymorphism in C which would probably impress some people on Twitter or something

slim bramble
gentle grove
#

I believe it's the same as what C++ does to talk to other C++, just with different abi

slim bramble
#

Can you stop being a compiler nerd

#

fr

gentle grove
#

I am not compiler nerd

#

That requires more credentials

slim bramble
#

Whatever they might be

gentle grove
#

None unfortunately

wooden yarrow
#

thanks!

slim bramble
#

Aren’t c++ templates compile time too

gentle grove
#

Yes, and so are generics, I believe always

#

So a template or generic doesn't exist in the compiled output, only variants of it for concrete types

slim bramble
#

Yeah obviously

light owl
gentle grove
#

I mean you can use templates for anything. Here I'm just focusing on the specific case of using it to implement a generic

shrewd smelt
pearl sail
slim bramble
visual meadow
#

Why is it when I resign an encrypted app store app with ldid, then ct_bypass, the app opens fine on 16, but not 17? It opens fine on 17 if I just ct_bypass it. The odd thing, however is if I attach lldb to the process and then call anything and then detach it the app opens fine

#

something like po getgid()

orchid fulcrum
#

what does the crash report say ?

visual meadow
#

Doesn't generate a crash report weird enough

orchid fulcrum
#

does it open when you attach, don't call anything and then detach ?

visual meadow
#

no

magic hazel
#

@grim sparrow

The simdjson library is designed for 64-bit processors and it seems that you are not compiling for a known 64-bit platform. All
      fast kernels will be disabled and performance may be poor. Please use a 64-bit target such as x64, 64-bit ARM or 64-bit PPC.```
grim sparrow
magic hazel
#

indeed

#

im assuming this will make performance far far worse

grim sparrow
#

I would test it

#

/ benchmark

#

I would still think a c++ impl would do better than objc

magic hazel
#

objc isn't that heavy surely

grim sparrow
#

Objc is heavy as balls

magic hazel
#

yikes

#

i was always under the impression that swift was the heavy one

grim sparrow
#

Nah

#

Swift 1 was 3x faster than objc4

magic hazel
#

Fire

magic hazel
grim sparrow
#

The performance gains only improved

magic hazel
#

True

#

Swift has gotten much faster

#

I can speak to that since I've tried basically every minor version atp

orchid fulcrum
#

pretty sure c is faster than swift

grim sparrow
#

When did I say c?

#

I’m talking about objective c

#

Not c

magic hazel
#

C code can run in Objective-C but you'd have to be comparing Objective-C code to Swift code

orchid fulcrum
magic hazel
#

Anything not Objective-C is not comparable

#

Because then it's just C

#

And yeah, no shit, C is faster

orchid fulcrum
#

so you are comparing method calls ?

magic hazel
#

If that's what Objective-C brings to the table in your testing then that's what you're comparing

#

Anything that Objective-C offers over C is testable

grim sparrow
orchid fulcrum
#

thats unfair ngl, objc uses dynamic dispatch while swift doesn't

magic hazel
#

I fail to see how it's unfair when one language makes one choice and another makes another and one choice leads to better performance and the other choice doesn't

grim sparrow
magic hazel
#

^

grim sparrow
#

And in this case we’re comparing the implementation of a system in Language A and Language B

#

And I’m saying that json decoding is faster in C++ than it would be in ObjC

magic hazel
#

It's like saying "Python has all this stuff that makes it great but it also makes it slow so it's not a fair comparison"

grim sparrow
#

Ur just missing context

magic hazel
#

I would have thought it would at least be close to as fast as C considering the glaze it gets

#

What does Objective-C actually have going for it then

grim sparrow
#

Objc method calls themselves are slow as balls but you mostly use C and C++ in those methods

#

so it can balance out

magic hazel
#

But like, if you're writing an iOS app, you're using Objective-C calls

grim sparrow
#

yeah mostly

orchid fulcrum
magic hazel
grim sparrow
#

Apple did kinda fix the dynamic dispatch problem with objc direct though

magic hazel
#

You're relying on C to give you performance

grim sparrow
#

but this was in like iOS 15?

orchid fulcrum
grim sparrow
#

and only works if your app targets iOS 15+

magic hazel
#

Which, in my opinion, is a pretty lame option

#

If your language performs so poorly you need C to save you

orchid fulcrum
#

starting to feel like ragebait 😭

magic hazel
#

So no back deploy

grim sparrow
magic hazel
#

Mega yikes

grim sparrow
magic hazel
#

No 32 bit woeis

grim sparrow
#

armv7 had neon but it was optional, I don’t think Apple did it?

magic hazel
#

?

#

What are you saying by saying C++

#

C++ performs very well

#

Generally

orchid fulcrum
slim bramble
harsh junco
#

you don’t really need plain c, you can use c++

orchid fulcrum
grim sparrow
magic hazel
orchid fulcrum
magic hazel
#

Which isn't really the same because it's not like Objective-C where it's completely inline

#

Iirc

#

You have to segment your code

orchid fulcrum
slim bramble
magic hazel
#

lmao it's so funny how much of a language is just hiding pointers

grim sparrow
#

Based website

slim bramble
#

I use it all the time

grim sparrow
#

you know a language is good when someone needs to buy that domain

slim bramble
#

I don't know which psychopath designed blocks but they are mentally deranged

magic hazel
#

Ngl I prefer C's syntax which feels wild to say

grim sparrow
#

So do I

magic hazel
#

Objective-C syntax is goofy asf

grim sparrow
#

It really is

orchid fulcrum
magic hazel
#

It's not quite far enough removed to forget you're using a C wrapper but it's far enough that it feels like you're in an uncanny valley

slim bramble
#

the rest is direct function call

magic hazel
#

ICL something deeply offends me about how you call methods in Objective-C and I don't know why

grim sparrow
#

Is There actually a functional difference other than methods should take blocks and functions should take closures

orchid fulcrum
#

if you hate it that much

#

lol

magic hazel
#

That's even worse

grim sparrow
#

See that’s insane

orchid fulcrum
slim bramble
#

Next goal, make a fully functional UI tweak using only C

grim sparrow
magic hazel
#

"Make anything in C" -> Possible tick -> Fun cross

slim bramble
grim sparrow
#

Yeah

orchid fulcrum
#

yeah its a calculator tweak made by luki

grim sparrow
#

I also saw a full app

#

It really isn’t that bad

slim bramble
#

You could prolly make a preprocessor which turns m file into full c code

grim sparrow
#

That’s called clang

#

Someone beat you to the punch

magic hazel
#

Wait are we talking C using iOS's libraries or C using your own homemade graphics library, foundation replacement, etc

magic hazel
#

Oh

#

Well then nvm

magic hazel
#

Basically just using Objective-C without directly writing Objective-C code, like you do when you use Objective-C classes in Swift

slim bramble
magic hazel
#

Objective-C's overlay is in C, and it sits on C, why wouldn't you be able to?

grim sparrow
#

There’s probably some archived tool on GitHub

grim sparrow
#

There is also the ability to just have a think about it

orchid fulcrum
slim bramble
#

just need that extra brackets parser

magic hazel
#

I remember when I first wanted to start programming I had this idea in my mind that C++ was this great abstraction over C and was a high level language, oh how wrong I was

orchid fulcrum
slim bramble
#

there are apis to do everything

grim sparrow
#

Not objc

#

C++

#

(It’s late)

orchid fulcrum
magic hazel
#

I wonder if Swift will ever drop Objective-C interop

grim sparrow
#

Heavily doubt

magic hazel
#

Shame

orchid fulcrum
magic hazel
#

While it's useful it holds the language back

slim bramble
grim sparrow
#

Why would Apple rewrite every framework in Swift

#

It’s a monumental waste of time

#

Objc direct fixes most of the performance problems

slim bramble
#

clang handles objective c, thus if you needed the runtime api, objc compilation would just be handled by clang++ which isn't the case

magic hazel
grim sparrow
#

They update it every year

#

Objc is still frequently getting optimisations

magic hazel
#

Major updates?

#

When was the last major update Objective-C got

grim sparrow
#

It’s all just performance updates

magic hazel
#

Which is basically just life support lmao

grim sparrow
#

but it’s all it needs

slim bramble
#

the goal was just to bring OOP to C

#

The rest is just C.

grim sparrow
#

When you’re targeting modern iOS and using the modern toolchain it’s really not that bad for performance

#

it’s not as good as Swift but it’s not that bad

slim bramble
grim sparrow
#

it’s just really not worth the hassle to rewrite literally thousands of binaries and then force probably tens of thousands of devs to rewrite

orchid fulcrum
magic hazel
#

Make syntax shorter, inline block literals perchance, better weak capture rules like [weak self], type safety perchance, better importing for modules, so no more header files

slim bramble
magic hazel
#

Better concurrency

grim sparrow
slim bramble
#

^

grim sparrow
#

If your program already exists who cares

#

They’re not problems that couldn’t be solved before

#

there’s no point rewriting it for the sake of rewriting it

#

Also weak self is not a swift thing

slim bramble
grim sparrow
#

weak captures are an arc thing

slim bramble
#

yes

magic hazel
slim bramble
#

Importing modules is just linking and importing a header...

grim sparrow
#

clearly you’ve never really used objc

magic hazel
slim bramble
#

and you even have @import

grim sparrow
#

@import is legendary

magic hazel
#

That I didn't know about

slim bramble
#

I never use it but it exists

grim sparrow
#

I pretty much always use it now