1
00:00:00,090 --> 00:00:03,630
Hey, thank you for joining me
for today's episode with Kabir.

2
00:00:04,080 --> 00:00:06,600
Before we begin, I wanted
to let you know what's new.

3
00:00:06,810 --> 00:00:07,799
Couple of things.

4
00:00:07,920 --> 00:00:11,610
I released a new library
to write Swift code.

5
00:00:11,610 --> 00:00:15,389
So if you're somebody who's interested
in making mac macros or any sort

6
00:00:15,389 --> 00:00:19,710
of dynamic code in Swift, you'll
definitely wanna check out Syntax Kit.

7
00:00:20,130 --> 00:00:24,150
The link to that will be in the
show notes you should consider.

8
00:00:24,795 --> 00:00:27,075
Subscribing to the newsletter
'cause that's free.

9
00:00:27,285 --> 00:00:29,235
But you should also
consider being a Patreon.

10
00:00:29,565 --> 00:00:31,665
It's like three bucks right now per month.

11
00:00:32,305 --> 00:00:37,105
We already have the next episode
posted on Patreon with Rachel Brindle,

12
00:00:37,105 --> 00:00:39,205
where we talk about Swift testing.

13
00:00:39,505 --> 00:00:42,295
So if you want early access to the
next episode, you'll definitely

14
00:00:42,355 --> 00:00:46,745
want to make sure you join the
Patreon, patreon.com/bright digit.

15
00:00:47,555 --> 00:00:48,695
And that's about it.

16
00:00:49,115 --> 00:00:50,645
I hope you enjoy today's episode.

17
00:00:53,906 --> 00:00:56,066
Welcome to another
episode of Empower Apps.

18
00:00:56,066 --> 00:01:00,556
I'm your host, Leo dm. Today
I'm joined by Kabir Oberai.

19
00:01:00,886 --> 00:01:02,921
Kabir Thank you so much
for coming on the show.

20
00:01:03,782 --> 00:01:04,707
Thank you for having me.

21
00:01:05,651 --> 00:01:08,111
it's been a few exciting
weeks for you, right?

22
00:01:08,141 --> 00:01:12,881
So not only do we have WWDC week,
but you graduated, is that correct?

23
00:01:13,592 --> 00:01:14,907
That's good act last week.

24
00:01:15,431 --> 00:01:16,451
Congratulations.

25
00:01:16,451 --> 00:01:19,001
Welcome to the workforce in 2025.

26
00:01:19,751 --> 00:01:20,021
Yeah.

27
00:01:20,081 --> 00:01:23,501
So, before we begin, I'll let you
go ahead and introduce yourself.

28
00:01:24,517 --> 00:01:24,937
Sorry.

29
00:01:24,997 --> 00:01:29,197
So I am, or I was a student
at the University of Waloo.

30
00:01:29,467 --> 00:01:35,897
And I, you know, I just graduated, with
a degree in computer science and, I've

31
00:01:35,897 --> 00:01:38,597
been interested in iOS development for.

32
00:01:39,322 --> 00:01:40,552
As long as I can remember.

33
00:01:41,042 --> 00:01:44,252
I started iOS in like 2013.

34
00:01:45,482 --> 00:01:49,682
just 'cause I wanted to make
apps, iOS apps seemed pretty cool.

35
00:01:50,012 --> 00:01:53,582
And then I learned objective C and a
year later, Swift came out and I was

36
00:01:53,582 --> 00:01:55,652
like, what did I do all of this for?

37
00:01:57,332 --> 00:02:02,442
But, you know, it was pretty I'm
glad I learned objective C and, I'm

38
00:02:02,442 --> 00:02:04,092
glad that Swift came out as well.

39
00:02:04,202 --> 00:02:04,652
And.

40
00:02:04,942 --> 00:02:10,462
You know, I was A-W-W-D-C scholar
in 2017 and I've developed some fun

41
00:02:10,462 --> 00:02:14,362
projects over the years, which I
think we will be talking about soon.

42
00:02:16,132 --> 00:02:20,772
one other thing worth
mentioning is I I've been in the

43
00:02:20,892 --> 00:02:22,782
workforce in and out for a bit.

44
00:02:22,882 --> 00:02:27,622
I was previously at
texts.com, which is a startup.

45
00:02:27,722 --> 00:02:33,272
I, we got acquired by Automatic, the
guys behind WordPress and Tumblr.

46
00:02:33,722 --> 00:02:39,682
And, then more recently I joined ramp
which is a FinTech based in New York.

47
00:02:40,681 --> 00:02:41,011
Okay.

48
00:02:41,161 --> 00:02:41,791
Awesome.

49
00:02:42,091 --> 00:02:43,231
well, congratulations.

50
00:02:43,951 --> 00:02:48,091
We're gonna talk about what came
outta WWDC and stuff like that.

51
00:02:48,661 --> 00:02:52,211
But we're also gonna talk about a
little tool you've, made called xTool.

52
00:02:52,871 --> 00:02:56,851
Before we get into xTool, let it,
let's jump back and do talk about wwdc.

53
00:02:56,851 --> 00:03:00,721
What were some things that you
were particularly interested

54
00:03:00,721 --> 00:03:06,491
in or what were things that you
were fascinated by, I guess.

55
00:03:07,947 --> 00:03:09,597
That was a bit, that was quite a bit.

56
00:03:09,667 --> 00:03:13,117
I think, you know, elephant in
the room, the liquid glass stuff

57
00:03:13,207 --> 00:03:16,537
is, definitely very nice to see.

58
00:03:16,737 --> 00:03:18,177
I love the luminess.

59
00:03:18,277 --> 00:03:20,677
I, I love all the, you know, the.

60
00:03:21,002 --> 00:03:25,292
The move towards sort
of skim to an extent?

61
00:03:26,702 --> 00:03:33,212
it's, yeah, it, it does definitely like
make designing harder in my opinion.

62
00:03:33,362 --> 00:03:37,322
'Cause you know, I. There was this
sweet spot of a few yours where you

63
00:03:37,322 --> 00:03:42,212
could just like whiteboard anything
and like drop it in Figma and you'd

64
00:03:42,212 --> 00:03:46,532
have like a really nice iOS design,
but now you have to think about all

65
00:03:46,532 --> 00:03:49,082
of these little effects and stuff.

66
00:03:49,132 --> 00:03:52,162
I do hope that we get,
some good tools for that.

67
00:03:52,272 --> 00:03:57,282
But you know, designing it, Swift UI
is also, pretty good approach to take.

68
00:03:57,352 --> 00:04:01,322
I'm excited by I'm pretty excited by
the foundation model stuff as well.

69
00:04:01,742 --> 00:04:03,422
You had a chance to
play around with it yet?

70
00:04:04,434 --> 00:04:10,874
not exactly, so I actually, I was poking
around one of the excode betas a few

71
00:04:10,964 --> 00:04:16,934
months ago, so like, not the 26 cycle,
but I think it was a 16 expert, 16 cycle.

72
00:04:17,384 --> 00:04:21,314
And I noticed this generative macro in.

73
00:04:22,019 --> 00:04:24,179
one of the excode 16 vaers.

74
00:04:24,192 --> 00:04:24,462
really?

75
00:04:24,692 --> 00:04:24,982
Okay.

76
00:04:25,959 --> 00:04:28,359
So that's when I poked
around with it actually.

77
00:04:28,429 --> 00:04:31,939
I think it was entitlement
gated at that point.

78
00:04:32,029 --> 00:04:34,369
Like I don't think it
was like fully usable.

79
00:04:34,429 --> 00:04:38,209
'cause it also like pulled in,
it was just the macros that

80
00:04:38,209 --> 00:04:39,619
they accidentally included.

81
00:04:39,807 --> 00:04:40,077
right.

82
00:04:40,939 --> 00:04:43,759
but, I was like, okay, this is.

83
00:04:44,029 --> 00:04:48,049
Definitely gonna lead to
something interesting in 26.

84
00:04:48,962 --> 00:04:50,757
And, and, and we know that now.

85
00:04:50,762 --> 00:04:50,982
Yeah.

86
00:04:51,469 --> 00:04:51,919
yeah.

87
00:04:52,249 --> 00:04:52,639
Yeah.

88
00:04:52,969 --> 00:04:56,569
well, not 26 at the time we,
one thought it would be 17.

89
00:04:56,629 --> 00:05:00,559
The release numbering is
also an interesting change.

90
00:05:00,849 --> 00:05:02,079
It's definitely nice.

91
00:05:02,619 --> 00:05:05,754
I can't wait to see, I mean, I'm.

92
00:05:05,904 --> 00:05:09,804
The mess that's going to be created
with the minor versioning though.

93
00:05:09,894 --> 00:05:13,944
'cause like, you know, you've solved
the, the major versioning, but,

94
00:05:15,122 --> 00:05:17,042
What do you think they're gonna
do with the minor versioning?

95
00:05:17,072 --> 00:05:22,172
I mean, I would just assume that
we're gonna see 26 1, 26 2, and it's

96
00:05:22,172 --> 00:05:23,972
still gonna go the way it was before.

97
00:05:23,972 --> 00:05:24,062
Right.

98
00:05:24,842 --> 00:05:26,702
As opposed to like months or something.

99
00:05:26,702 --> 00:05:27,812
That would be really confusing.

100
00:05:28,022 --> 00:05:29,342
I mean, I don't know.

101
00:05:29,372 --> 00:05:32,552
I guess that's kind of what,
what like Ubuntu does that right?

102
00:05:32,552 --> 00:05:34,052
So like it wouldn't be that

103
00:05:34,149 --> 00:05:38,529
hot take, my hot take is that,
months would've actually, would

104
00:05:38,529 --> 00:05:40,509
actually be a nice approach to take.

105
00:05:41,079 --> 00:05:44,139
'Cause like if you're going to
go with the calver approach, then

106
00:05:44,139 --> 00:05:45,609
just like go all in, you know?

107
00:05:45,617 --> 00:05:46,142
Yeah, yeah.

108
00:05:46,142 --> 00:05:46,472
Yeah.

109
00:05:46,682 --> 00:05:49,262
Actually it would be, 'cause
like they do pretty much release

110
00:05:49,682 --> 00:05:52,652
26.1 in January, more or less so.

111
00:05:53,027 --> 00:05:54,317
It would kinda line up,

112
00:05:54,804 --> 00:05:55,524
That's true.

113
00:05:55,644 --> 00:05:56,304
That's true.

114
00:05:56,584 --> 00:06:00,484
And you know, the way that they talk
about releases usually is like if you

115
00:06:00,484 --> 00:06:04,924
look at some of the Swift internal
sources, they talk about like the fall

116
00:06:05,134 --> 00:06:09,094
2024 release or the spring 2024 release.

117
00:06:09,424 --> 00:06:11,224
So I do hope that they do that.

118
00:06:11,224 --> 00:06:12,844
If anyone from Apple is listening,

119
00:06:12,927 --> 00:06:13,887
Yeah, that actually

120
00:06:13,894 --> 00:06:14,529
not till late.

121
00:06:15,057 --> 00:06:15,417
Yeah.

122
00:06:16,497 --> 00:06:16,917
Cool.

123
00:06:16,917 --> 00:06:20,687
So let's talk about xTool.

124
00:06:20,992 --> 00:06:24,682
For those who don't know, I'll let you
go ahead and explain exactly what it is.

125
00:06:25,829 --> 00:06:32,639
At the moment the main way to develop
iOS apps or apps for Apple platforms is

126
00:06:32,639 --> 00:06:36,299
with Xcode, which is Apple's, IDE, and.

127
00:06:37,299 --> 00:06:40,839
You know, there's, there's a lot of
benefits to Xcode of course, and you

128
00:06:40,839 --> 00:06:45,189
get your nice end-to-end vertical
integration across Apple Stack.

129
00:06:45,999 --> 00:06:47,649
but there are issues with it, right?

130
00:06:47,759 --> 00:06:51,509
And, you know, anytime you have
a bug, it's not open source.

131
00:06:51,569 --> 00:06:53,939
It's hard to fix any of that stuff.

132
00:06:54,329 --> 00:06:57,719
And sometimes you just need something
more lightweight or sometimes

133
00:06:57,719 --> 00:07:02,139
you want to use do development
on other platforms than macOS.

134
00:07:02,599 --> 00:07:02,839
And.

135
00:07:03,264 --> 00:07:05,704
This is a problem that
xTool aims to solve.

136
00:07:06,574 --> 00:07:13,624
And, in essence, xTool is a
re-implementation of a lot of what

137
00:07:13,624 --> 00:07:19,744
Xcode does in a way that's fully open
source and works across platforms,

138
00:07:19,744 --> 00:07:25,119
which means you can build iOS apps
on macOS, windows with Ws and Linux.

139
00:07:26,119 --> 00:07:29,629
Can you build anything in the
Apple pla, any Apple platform?

140
00:07:31,000 --> 00:07:34,030
So the foundations for
that are all in place.

141
00:07:34,150 --> 00:07:39,830
At the moment I am like the
building step is primarily geared

142
00:07:39,830 --> 00:07:45,960
towards iOS stuff, but we actually
do build the macOS SDK as well.

143
00:07:46,650 --> 00:07:50,040
And it, I don't think it would
be a stretch for us to support

144
00:07:50,040 --> 00:07:51,900
building like Vision Os and,

145
00:07:52,314 --> 00:07:54,324
If you have the SDK, that's
what you need, right?

146
00:07:54,690 --> 00:07:55,350
Exactly.

147
00:07:55,530 --> 00:08:00,820
It's the bit that isn't done yet for,
like macOS for example, is the macOS

148
00:08:00,840 --> 00:08:05,070
app bundle structure is slightly
different from the iOS bundle structure.

149
00:08:05,490 --> 00:08:09,330
So for us to build Mac apps,
we just have to like move some

150
00:08:09,330 --> 00:08:10,920
files around in different ways.

151
00:08:11,030 --> 00:08:12,535
But it's not, it's not too hard.

152
00:08:12,875 --> 00:08:13,625
It's not too hard.

153
00:08:13,685 --> 00:08:16,685
I actually added,
simulator support recently.

154
00:08:17,009 --> 00:08:17,189
That's

155
00:08:18,185 --> 00:08:21,755
yeah, so you can, you can build
for the simulator with xTool, which

156
00:08:21,755 --> 00:08:25,730
is especially useful when you are
developing with xTool on macOS.

157
00:08:26,370 --> 00:08:31,530
So what are some things that you
had to learn to get this going?

158
00:08:31,530 --> 00:08:35,310
What are some fundamentals
for getting Xcode working or

159
00:08:35,310 --> 00:08:36,840
I guess the bill tools working

160
00:08:37,087 --> 00:08:37,507
Yeah,

161
00:08:37,860 --> 00:08:39,000
in another os.

162
00:08:39,877 --> 00:08:46,357
I think, this really, really pushed
my, like, the extent of my knowledge

163
00:08:46,417 --> 00:08:50,797
on iOS and also like, it's been an
amazing learning experience for me.

164
00:08:51,247 --> 00:08:57,997
So a little bit of historic context here
actually is, this started off as a project

165
00:08:58,047 --> 00:09:01,047
that I started building in around 2017.

166
00:09:02,757 --> 00:09:08,167
so, i, I was, you know, a, a
part of the jailbreak community.

167
00:09:09,667 --> 00:09:14,617
and in the jailbreak community we
had this build system called Theos.

168
00:09:14,987 --> 00:09:19,157
And this was the build system that
allows you to build jailbreak tweaks.

169
00:09:20,372 --> 00:09:21,692
Amongst other things.

170
00:09:22,092 --> 00:09:24,552
And it was completely detached from Xcode.

171
00:09:24,842 --> 00:09:29,562
It was based around GNU make which if
you've ever used make you can imagine

172
00:09:29,562 --> 00:09:31,332
is an absolute nightmare to deal with.

173
00:09:32,142 --> 00:09:38,802
But the crux of it is somehow through a
lot of clue and, you know, batch work.

174
00:09:39,252 --> 00:09:44,832
This build system supported building
iOS apps on any platform which is like.

175
00:09:45,037 --> 00:09:47,317
Even on like native windows.

176
00:09:47,377 --> 00:09:48,307
And on Linux.

177
00:09:48,417 --> 00:09:50,487
But it was specifically four J Big.

178
00:09:50,537 --> 00:09:53,537
'Cause these apps weren't, you know,
there's this important step of code

179
00:09:53,537 --> 00:09:57,947
signing that you do with actual normal
iOS apps that we weren't doing there.

180
00:09:58,367 --> 00:10:03,047
So long story short, I eventually became
one of the core maintainers of Theos.

181
00:10:03,467 --> 00:10:06,527
And I learned a lot about
how the plumbing works.

182
00:10:06,587 --> 00:10:08,057
I added Swift support to it.

183
00:10:08,177 --> 00:10:09,617
I added a bunch of other things to it.

184
00:10:10,157 --> 00:10:14,077
And then I. The one question
that kept sort of ringing in the

185
00:10:14,077 --> 00:10:18,247
back of my head was, why is this
not accessible to more people?

186
00:10:18,487 --> 00:10:22,147
You know, why, why is it that
only people in the JFA community

187
00:10:22,567 --> 00:10:27,817
have the fortune of being able to
develop iOS apps on any platform?

188
00:10:28,267 --> 00:10:33,097
And around the same time I was
working on this other project called

189
00:10:33,097 --> 00:10:37,817
supercharge, which was basically
designed around side loading.

190
00:10:37,817 --> 00:10:41,907
So being able to install iOS apps
without going through the App store.

191
00:10:43,227 --> 00:10:43,317
and.

192
00:10:44,317 --> 00:10:45,127
Like this.

193
00:10:45,427 --> 00:10:49,657
So supercharge in the end there was,
there were a lot of roadblocks and I

194
00:10:49,657 --> 00:10:55,867
kind of, decided to put a stop on it
because I was just a bit worried about,

195
00:10:56,527 --> 00:10:59,197
you know, legal factors and other things.

196
00:10:59,205 --> 00:11:00,675
is, that is a consideration.

197
00:11:00,675 --> 00:11:01,095
Yes.

198
00:11:01,627 --> 00:11:02,887
it definitely is.

199
00:11:03,337 --> 00:11:07,477
But, I learned a lot from supercharge
as well, including, and, and I.

200
00:11:08,197 --> 00:11:13,597
I developed a lot of code there that was
able to interact with Apple's developer

201
00:11:13,597 --> 00:11:19,657
services and take any app and sign it, you
know, provision it, get those certificates

202
00:11:19,657 --> 00:11:23,587
and profiles and all of those things
that you need, and then sign it and

203
00:11:23,587 --> 00:11:25,987
then also install it onto your device.

204
00:11:26,377 --> 00:11:30,337
And, some of the things I had to
learn along the way there, besides the

205
00:11:30,337 --> 00:11:34,837
interacting with the developer APIs was
like to actually set to install it onto

206
00:11:34,837 --> 00:11:39,397
your device, we had to emulate the same
protocol that Xcode uses when you hit

207
00:11:39,397 --> 00:11:41,857
Command R and you install over wifi.

208
00:11:42,457 --> 00:11:45,547
So yeah, lots of, you know,
lots of learning there for sure.

209
00:11:46,147 --> 00:11:48,787
And, anyway.

210
00:11:49,527 --> 00:11:52,737
Eventually I realized I had
these two pieces that were great.

211
00:11:52,767 --> 00:11:56,667
You know, you had this Theos thing
that was able to build iOS apps but not

212
00:11:56,667 --> 00:11:59,637
install them onto a J non J broken device.

213
00:11:59,907 --> 00:12:02,337
And then you had this supercharge
thing that was able to.

214
00:12:02,952 --> 00:12:05,472
Sign apps and install
them onto any device.

215
00:12:05,832 --> 00:12:09,282
And I was like, I could take my learnings
from here and I could take some of

216
00:12:09,282 --> 00:12:13,962
the code from here even and sort of
combine it into this one project.

217
00:12:14,232 --> 00:12:18,192
The third piece and the final
piece that really fit in place was

218
00:12:18,192 --> 00:12:22,632
when Swift improved their support
for cross compilation with Swift

219
00:12:22,632 --> 00:12:24,762
Package Manager, Swift SDK support.

220
00:12:25,092 --> 00:12:29,352
So this is something that didn't really
land into Swift six one or six two even.

221
00:12:29,435 --> 00:12:30,305
I was gonna ask.

222
00:12:30,777 --> 00:12:31,167
Yeah.

223
00:12:31,237 --> 00:12:35,427
It was just like last year basically
where, you know, this w of a dc in

224
00:12:35,427 --> 00:12:39,417
fact, they, they made a big show of
how you can now build web assembly

225
00:12:39,417 --> 00:12:41,427
apps natively with Swift, right?

226
00:12:41,657 --> 00:12:45,167
Even Android apps for that matter is
something you can build with Swift now.

227
00:12:45,287 --> 00:12:45,707
And,

228
00:12:45,865 --> 00:12:46,885
done an episode on.

229
00:12:47,702 --> 00:12:48,992
Oh, you have, that's awesome.

230
00:12:49,102 --> 00:12:55,102
But yeah, you know, so like all of those
pieces were incredibly relevant here

231
00:12:55,162 --> 00:13:02,512
because I was able to build a Swift SDK,
like we use for building Android apps.

232
00:13:02,992 --> 00:13:07,762
But, this one can build iOS
apps with Swift Package Manager.

233
00:13:09,052 --> 00:13:09,862
And yeah.

234
00:13:09,862 --> 00:13:13,492
So, you know, just combine all of those
pieces and you get this end-to-end

235
00:13:13,492 --> 00:13:20,242
solution that can build, provision, sign
and install an iOS app from any platform.

236
00:13:21,242 --> 00:13:26,102
So one of the things I think you mentioned
was that there was like an open source.

237
00:13:26,492 --> 00:13:32,382
They had open source part of the build,
Swift build, how it works with Xcode.

238
00:13:32,382 --> 00:13:34,272
Is that correct or am I missing something?

239
00:13:35,194 --> 00:13:39,754
So Swift Build actually came along
fairly late in this whole process.

240
00:13:39,904 --> 00:13:44,224
And it's, it's confusing 'cause there's
Swift build, which is like the Swift

241
00:13:44,224 --> 00:13:46,354
space build command that you use to build.

242
00:13:47,149 --> 00:13:47,809
With Swift Back

243
00:13:48,267 --> 00:13:48,567
It is

244
00:13:48,889 --> 00:13:50,869
you have Swift Hyphen Build, right?

245
00:13:51,229 --> 00:13:53,389
So Swift Hyphen Build is the Excode thing.

246
00:13:53,719 --> 00:13:56,569
And yeah, that, that has been
open sourced fairly recently.

247
00:13:56,809 --> 00:13:59,839
I actually built all of this way
before Swift Build came around.

248
00:14:00,739 --> 00:14:05,239
I. But I am looking into using
Swift build to streamline most of

249
00:14:05,239 --> 00:14:09,049
this build process, and it's gonna
have a huge impact here for sure.

250
00:14:09,289 --> 00:14:10,219
At some point.

251
00:14:10,699 --> 00:14:14,889
It's actually like Swift Package Manager
is currently working on integrating

252
00:14:14,889 --> 00:14:17,199
Swift Build as their native build system.

253
00:14:17,559 --> 00:14:19,560
And once that happens I am.

254
00:14:19,979 --> 00:14:23,339
We are gonna have some
benefits from that immediately.

255
00:14:23,339 --> 00:14:28,019
And then, you know, we are also gonna be
able to probably use that with X two to

256
00:14:28,019 --> 00:14:30,359
remove some of the manual packaging code

257
00:14:30,517 --> 00:14:31,507
Right, right, right.

258
00:14:31,747 --> 00:14:36,697
So what's, what is the difference between
Swift Space build and Swift Build?

259
00:14:37,619 --> 00:14:41,799
Swift space build is Swift
package managers build command.

260
00:14:41,799 --> 00:14:42,069
Right?

261
00:14:42,399 --> 00:14:46,509
And until last year it was entirely like.

262
00:14:47,379 --> 00:14:48,099
Custom.

263
00:14:49,239 --> 00:14:55,239
it did its own, you know, coordination
with the underlying Swift compiler.

264
00:14:56,979 --> 00:15:01,479
in fact, it now uses Swift
dashboard under the hood,

265
00:15:01,667 --> 00:15:06,197
For starting with Swift 6.1,

266
00:15:07,059 --> 00:15:08,199
Six two.

267
00:15:08,299 --> 00:15:13,189
And I say it uses it, but that's with
an asterisk where it's an option that

268
00:15:13,189 --> 00:15:15,079
you can provide to make it use it.

269
00:15:15,679 --> 00:15:16,009
That's good

270
00:15:16,090 --> 00:15:20,290
Yeah, so you can actually like test
it out now, but I think, it's probably

271
00:15:20,290 --> 00:15:24,510
not going to be stable until I, I
don't know after this timelines here,

272
00:15:25,044 --> 00:15:25,764
Right, right.

273
00:15:26,250 --> 00:15:26,580
yeah.

274
00:15:26,934 --> 00:15:31,134
It's funny you were mentioning,
jailbreaking and stuff because I

275
00:15:31,134 --> 00:15:36,864
recently read an article about the
Hack OSH community and how they're

276
00:15:36,864 --> 00:15:43,314
kind of, now that we know, tahoe 26
will be the last Intel supported Mac.

277
00:15:43,374 --> 00:15:48,684
They're pretty much shutting down now
because that was a big opening was

278
00:15:48,684 --> 00:15:51,504
to be able to build for Intel, right.

279
00:15:51,654 --> 00:15:52,644
And do it on Intel.

280
00:15:52,974 --> 00:15:55,374
So it's funny you're
imagining now we can do.

281
00:15:55,779 --> 00:15:58,689
Build on Linux and Windows as well.

282
00:15:58,899 --> 00:16:03,239
To me, like what really attracts
me to xTool is the CI option.

283
00:16:03,869 --> 00:16:10,139
If anybody knows it's cheaper to run a
Linux vm, than it is to run a Mac vm.

284
00:16:10,769 --> 00:16:15,759
And so being able to do that would
be absolutely, you know, fantastic

285
00:16:15,759 --> 00:16:18,699
for the community just to get
the builds going and running.

286
00:16:19,339 --> 00:16:23,869
I just wanna interject that real
quick and I do wanna mention that

287
00:16:23,899 --> 00:16:27,739
with regards to the CI option,
that's something I have been doing

288
00:16:27,739 --> 00:16:29,749
a lot of research into recently.

289
00:16:30,079 --> 00:16:34,489
I think the main blocker that is
actually legal rather than technical.

290
00:16:34,734 --> 00:16:39,994
Now that xTool exists, that isn't any
technical blocker, but there might be a

291
00:16:39,994 --> 00:16:45,854
potential legal blocker, which is that,
apple doesn't the, you know, the license

292
00:16:45,854 --> 00:16:49,844
agreement asks that you use macOS to

293
00:16:49,952 --> 00:16:49,982
Okay.

294
00:16:50,629 --> 00:16:51,329
deploy apps.

295
00:16:51,974 --> 00:16:54,209
So yeah, the way that,
you know, I've been.

296
00:16:54,669 --> 00:16:58,689
Talking about xTool is, yeah,
we support Linux, we support

297
00:16:58,689 --> 00:17:00,379
Windows, we support macOS.

298
00:17:00,729 --> 00:17:04,989
But as far as the license
agreement goes, it does say you

299
00:17:04,989 --> 00:17:06,519
should be using Apple hardware.

300
00:17:06,789 --> 00:17:11,769
So like, I've been using it
within like, dock on macOS or even

301
00:17:11,769 --> 00:17:13,389
the new containerization stuff.

302
00:17:13,419 --> 00:17:15,609
I actually wanna give that a spin soon.

303
00:17:16,089 --> 00:17:19,354
And that, that's another thing I'm
very excited about with this dub.

304
00:17:19,774 --> 00:17:23,594
But, you know, I've been
using it in a VM as well.

305
00:17:23,834 --> 00:17:27,494
There's like, the rest of it is kind
of open to legal interpretation.

306
00:17:27,834 --> 00:17:29,324
I'm not a lawyer yeah.

307
00:17:30,944 --> 00:17:34,954
but it's very interesting and
I have actually, I do actually

308
00:17:34,954 --> 00:17:40,204
know that it is possible to use
this on CI on a Linux CI machine.

309
00:17:41,029 --> 00:17:43,879
just gotta figure out whether
it, the law allows it.

310
00:17:44,102 --> 00:17:44,792
right, right.

311
00:17:44,822 --> 00:17:45,302
Exactly.

312
00:17:45,302 --> 00:17:45,962
Exactly.

313
00:17:46,502 --> 00:17:50,192
So how, what's the difference?

314
00:17:50,292 --> 00:17:56,412
What goes into building an app, as
opposed to like building a Swift

315
00:17:56,412 --> 00:17:58,122
package where you just compile Swift?

316
00:17:58,552 --> 00:18:02,712
What are the components of building an
app that are required or that you learned

317
00:18:03,272 --> 00:18:04,652
that is going on in the background?

318
00:18:04,652 --> 00:18:07,732
When you build an Xcode,
you build an iOS app.

319
00:18:08,879 --> 00:18:13,249
So when you build an iOS app, in fact, you
can actually let's start with macros here.

320
00:18:13,309 --> 00:18:14,989
'cause that's the easy option.

321
00:18:15,019 --> 00:18:19,849
If you build a macros executable,
you know, these days you use like

322
00:18:19,849 --> 00:18:22,279
your admin to mark the entry point.

323
00:18:22,819 --> 00:18:28,999
If you import Swift UI in a macOS
executable and you like declare your

324
00:18:28,999 --> 00:18:34,549
main thing to be an app, like the app
protocol, you can build a macOS app.

325
00:18:34,799 --> 00:18:38,094
You, you can turn any plain
executable into a macOS app.

326
00:18:39,699 --> 00:18:44,319
Yeah, so, so like the bare minimum
there is actually very little, like

327
00:18:44,409 --> 00:18:49,279
you just, you know, need to import
Swift ui or UI kit or app kit.

328
00:18:49,369 --> 00:18:56,309
And then Mark the, either your app
Delicate or your app protocol with admin.

329
00:18:56,759 --> 00:18:58,079
The, the, the.

330
00:18:58,589 --> 00:19:02,219
Bit that really matters after
that is the bundling bit.

331
00:19:02,429 --> 00:19:05,799
So once you have an executable
you can run it on macOS and you

332
00:19:05,799 --> 00:19:07,749
can distribute a plain executable.

333
00:19:07,899 --> 00:19:11,079
But that doesn't work on iOS, of course.

334
00:19:11,179 --> 00:19:15,529
On iOS or if you wanna do
anything fancy on macOS, right?

335
00:19:15,534 --> 00:19:16,849
What you need is this bundle.

336
00:19:17,299 --> 00:19:23,089
And if you, if you look@any.app under
the hood, like you go to any of the

337
00:19:23,172 --> 00:19:24,852
It's just basically a folder.

338
00:19:25,069 --> 00:19:25,579
Exactly.

339
00:19:25,579 --> 00:19:27,259
It's a folder just called our app.

340
00:19:27,349 --> 00:19:30,739
And then it has like a few
directories inside it, and then

341
00:19:30,979 --> 00:19:34,369
one of those files inside it is
that executable that you built.

342
00:19:34,669 --> 00:19:34,939
Right.

343
00:19:36,499 --> 00:19:41,389
and then the other things that are there
are, you have an info P list, which you.

344
00:19:42,334 --> 00:19:46,734
Most people have seen as well is just
like, it declares important things that

345
00:19:46,734 --> 00:19:48,234
the system should know about the app.

346
00:19:48,774 --> 00:19:50,364
And then you have your signing.

347
00:19:50,394 --> 00:19:54,024
And signing is actually the,
the trickiest bit of this.

348
00:19:54,114 --> 00:19:57,894
When it comes to iOS on macOS,
you can like pseudo sign,

349
00:19:57,894 --> 00:20:00,024
which is very easy to do.

350
00:20:00,144 --> 00:20:06,084
On iOS you need to have like a valid
code signature, which basically proves

351
00:20:06,084 --> 00:20:12,204
that you are a specific developer
and proves that Apple has given you

352
00:20:12,204 --> 00:20:15,774
permission to run this app on your device.

353
00:20:17,109 --> 00:20:20,779
So when you run an app and you run
into signing errors or you see that

354
00:20:20,779 --> 00:20:24,779
your app is trying to be provisioned
or like is generating certificates

355
00:20:24,779 --> 00:20:29,009
or, you know, whatnot that's kind of
what's going on under the hood there.

356
00:20:29,459 --> 00:20:35,279
So, in essence, The steps here
are basically you build your main

357
00:20:35,279 --> 00:20:39,329
executable, and this can be done
with, you know, Swift Package Manager.

358
00:20:39,719 --> 00:20:42,659
You just need to have your
target with at main in it.

359
00:20:42,899 --> 00:20:47,339
And then you need to bundle it in this
folder with the info p list next to it.

360
00:20:47,669 --> 00:20:53,779
And, the other thing you need
that is you need, to generate your

361
00:20:53,779 --> 00:20:57,829
provisioning profile, which is the
sort of permission slip from Apple that

362
00:20:57,829 --> 00:20:59,899
says this app can run on this device.

363
00:21:00,279 --> 00:21:03,699
And you sign your app and you
include that provisioning profile.

364
00:21:04,199 --> 00:21:06,539
And then you've got a
fully functioning iOS app.

365
00:21:06,809 --> 00:21:08,429
In fact that's a.app.

366
00:21:08,519 --> 00:21:13,469
And then you also often distribute
apps on IOS's IPA files.

367
00:21:13,799 --> 00:21:17,159
And IPA file is actually
just a.app, but then.

368
00:21:17,279 --> 00:21:18,329
Compressed as a

369
00:21:18,427 --> 00:21:19,507
Yeah, exactly.

370
00:21:20,437 --> 00:21:21,217
That makes sense.

371
00:21:21,317 --> 00:21:26,297
What are, just before we touch on
debugging and deployment, I do wanna

372
00:21:26,297 --> 00:21:30,467
see was there anything else that caught
your interest, that you thought was

373
00:21:30,467 --> 00:21:35,547
interesting about the development process
that you didn't, that you learned about?

374
00:21:35,807 --> 00:21:37,487
And in the process of making xTool.

375
00:21:39,897 --> 00:21:43,092
I think, one of the other
very interesting things.

376
00:21:43,727 --> 00:21:48,407
Is that, the app store
connect API is a gem.

377
00:21:48,587 --> 00:21:49,607
And I found it

378
00:21:49,630 --> 00:21:51,310
You mean not related to Ruby?

379
00:21:51,310 --> 00:21:53,210
You just mean it's, you
really like it, right?

380
00:21:53,247 --> 00:21:53,487
yeah,

381
00:21:53,660 --> 00:21:53,960
Okay.

382
00:21:54,897 --> 00:21:58,197
no, that was an unintentional pun,
but I'm gonna pretend like I meant it.

383
00:21:59,197 --> 00:22:01,657
have you looked at tools like Fastlane?

384
00:22:02,399 --> 00:22:07,639
Yeah, I actually, so, so I did
a talk about this about the sort

385
00:22:07,639 --> 00:22:12,859
of roots of this project two
years ago at this, at Swift do.

386
00:22:13,377 --> 00:22:13,467
Okay.

387
00:22:14,659 --> 00:22:19,539
and, that so that talk was just
about like, here's the rudimentary

388
00:22:19,539 --> 00:22:20,769
things that we're working on.

389
00:22:20,769 --> 00:22:22,719
Here's a sneak peek into the future.

390
00:22:22,929 --> 00:22:26,139
It was a talk about iOS
development or, or just like.

391
00:22:26,754 --> 00:22:31,014
The life of Swift outside of Xcode,
which included cross-platform things.

392
00:22:31,264 --> 00:22:34,534
It's amazing to see how things
have matured over these two years.

393
00:22:34,634 --> 00:22:37,514
Also like, you know, some things
are still holding us back, but,

394
00:22:38,174 --> 00:22:41,294
you know, there's, in, in general
there's a lot of progress here.

395
00:22:41,534 --> 00:22:44,294
But, you know, so, so like.

396
00:22:44,669 --> 00:22:50,389
I actually did speak to Josh Holtz at
that, after that doc he was at Swift D

397
00:22:50,659 --> 00:22:52,969
and he's the maintainer, the Fastlane.

398
00:22:53,329 --> 00:22:58,989
And he was super excited about, everything
that this could do for Fastlane.

399
00:22:59,529 --> 00:23:02,199
So, you know, we have, we
have an open GitHub issue on

400
00:23:02,199 --> 00:23:03,939
both xTool and on Fastlane.

401
00:23:04,039 --> 00:23:08,929
To Jack this, and I haven't quite figured
out what this integration looks like yet.

402
00:23:09,559 --> 00:23:15,679
And I haven't spoken to Josh about
it recently, but, I would definitely

403
00:23:15,679 --> 00:23:17,719
love for that to happen at some point.

404
00:23:17,799 --> 00:23:22,149
It sounds like you're touching on some of
the same stuff with signing and all that,

405
00:23:22,249 --> 00:23:25,399
In fact, like there were a lot of
times that I had like bugs that

406
00:23:25,399 --> 00:23:28,039
I was trying to solve and I would
just pop up and fastly and be like,

407
00:23:28,069 --> 00:23:29,719
oh, so that's how they fix that.

408
00:23:30,252 --> 00:23:32,612
and they fixed a lot of bugs yeah.

409
00:23:33,872 --> 00:23:34,202
yeah.

410
00:23:34,232 --> 00:23:34,587
Very cool.

411
00:23:34,887 --> 00:23:39,747
So one of the, the other thing I wanted to
mention was the way, so when I got started

412
00:23:39,777 --> 00:23:41,967
using xTool, there was a specific way.

413
00:23:43,017 --> 00:23:44,367
The project was set up.

414
00:23:44,367 --> 00:23:46,227
You don't have like an Xcode project.

415
00:23:46,284 --> 00:23:49,694
And explain how that works exactly
and why it's different from using

416
00:23:49,694 --> 00:23:51,284
just a regular Xcode project.

417
00:23:52,145 --> 00:23:56,285
So there's a trend recently,
and it's not just me doing this.

418
00:23:56,355 --> 00:23:59,835
There's a lot of folks who are
starting to realize that like expert

419
00:23:59,835 --> 00:24:01,935
projects have a host of issues.

420
00:24:02,475 --> 00:24:05,715
You know, like if you've ever had to
deal with a merge conflict with an

421
00:24:05,715 --> 00:24:08,635
Xcode project it's a nightmare, right?

422
00:24:08,735 --> 00:24:09,575
You don't know what to do.

423
00:24:09,685 --> 00:24:13,495
'Cause like it's all, the Xcode
project is all XML and it's just a

424
00:24:13,495 --> 00:24:16,015
blob of like autogenerated stuff.

425
00:24:17,335 --> 00:24:21,235
so there's a lot of, there, there's
this huge push that people are making

426
00:24:21,235 --> 00:24:25,165
towards declarative package management
or declarative project management.

427
00:24:25,690 --> 00:24:28,700
And there's some other great you
know, folks who are doing this.

428
00:24:28,700 --> 00:24:32,290
If you've seen Xcode Gen
or if you've seen tourist.

429
00:24:32,290 --> 00:24:33,040
Yes.

430
00:24:33,460 --> 00:24:36,520
I actually had a really nice
conversation with the tourist,

431
00:24:37,270 --> 00:24:40,150
folks few weeks ago after ExTool.

432
00:24:40,520 --> 00:24:44,510
And we've also been talking about
various ways that, you know, we

433
00:24:44,510 --> 00:24:46,130
can integrate things together.

434
00:24:46,500 --> 00:24:52,420
As a big fan of xTool or tourist yeah,
I would love for the things to kind of

435
00:24:52,420 --> 00:24:55,690
be on the same page 'cause I'm starting
to move all my projects to tourist.

436
00:24:56,602 --> 00:24:56,962
Yeah.

437
00:24:56,962 --> 00:24:58,792
Like that's, that's the dream, right?

438
00:24:58,912 --> 00:25:01,192
Ideally it would be amazing
if you could take it to its

439
00:25:01,192 --> 00:25:03,112
project and just build it with x.

440
00:25:03,585 --> 00:25:04,030
Yeah, exactly.

441
00:25:04,252 --> 00:25:08,572
So yeah, the idea there is basically
like, let's move away from having this

442
00:25:08,572 --> 00:25:13,562
expert project this massive expert
project file as the source of truth

443
00:25:14,042 --> 00:25:18,902
and use declarative package management
with like the Swift project manifest.

444
00:25:18,902 --> 00:25:23,402
That's very similar to package Swift
that you use for Swift packages, right?

445
00:25:23,792 --> 00:25:27,602
Kind of what you're adding on top of
your package Swift is you're adding

446
00:25:27,632 --> 00:25:29,822
instructions on what the app looks like.

447
00:25:30,032 --> 00:25:33,932
Just for starters, you need a
bundle ID for it, and you need

448
00:25:33,932 --> 00:25:35,852
to select a development team.

449
00:25:36,182 --> 00:25:39,232
And then there's a few other things
there, like, different capabilities

450
00:25:39,232 --> 00:25:44,992
your app might have, you know, like
background modes, or like entitlements,

451
00:25:44,992 --> 00:25:46,012
all of those things, right?

452
00:25:46,762 --> 00:25:50,952
So as a matter of fact you might
have noticed recently that even Apple

453
00:25:50,952 --> 00:25:52,602
is moving in the same direction.

454
00:25:53,082 --> 00:25:56,992
Where if you look at Swift Playgrounds
they actually did something very

455
00:25:56,992 --> 00:26:02,572
similar where they have this library
called Apple Product Types, and you can

456
00:26:02,572 --> 00:26:09,052
declare within your Swift package or
dot iOS app, using Swift Playgrounds.

457
00:26:09,512 --> 00:26:13,112
You know, I realized that this was the
direction we were moving and this was

458
00:26:13,112 --> 00:26:15,212
the best direction to take xTool as well.

459
00:26:15,782 --> 00:26:20,942
For starters, at the moment, you
have this, so, so an xTool project

460
00:26:20,942 --> 00:26:25,382
is basically a package Swift, you
know, it's a General Swift package.

461
00:26:25,482 --> 00:26:28,842
And then the only thing you add
to it is this xTool, YAML file.

462
00:26:29,382 --> 00:26:32,892
And this just all you need
to begin with is a bundle id.

463
00:26:33,102 --> 00:26:36,672
And, you know, when you run X
to Dev, it figures out the rest.

464
00:26:37,052 --> 00:26:42,472
It takes your package, it tries
to scan it for the iOS app target

465
00:26:42,472 --> 00:26:46,312
that it thinks will be the Root
app project, the root app target.

466
00:26:46,702 --> 00:26:50,962
It'll build it for you and then it'll
package it based on what you've given you,

467
00:26:51,052 --> 00:26:53,512
what you've given in, in the xTool Y file.

468
00:26:54,270 --> 00:26:57,045
How about things like the product
type and things like that?

469
00:26:57,135 --> 00:26:59,085
That would just be done
in the Swift package.

470
00:27:00,417 --> 00:27:03,807
So when you say product
type, do you mean like ex app

471
00:27:03,807 --> 00:27:06,507
extensions or do you mean Okay.

472
00:27:06,777 --> 00:27:07,017
App

473
00:27:07,250 --> 00:27:11,805
type platform, things like that,
that need to be set within a typical

474
00:27:12,027 --> 00:27:12,297
Yeah.

475
00:27:12,327 --> 00:27:15,967
So some of these things we try to
get outta the package at Swift.

476
00:27:16,017 --> 00:27:19,797
For example, like if you wanna select
like a deployment target that is

477
00:27:19,797 --> 00:27:25,267
actually you, you just use the platform's
field in package Swift it's, you

478
00:27:25,267 --> 00:27:28,537
know, we, we dump the package Swift,
we scan it, and we figure out the

479
00:27:28,537 --> 00:27:30,247
right deployment target to use that.

480
00:27:30,727 --> 00:27:34,777
But there's some things that, you
can't quite do in Packet Swift.

481
00:27:34,777 --> 00:27:36,127
So like product types, right?

482
00:27:36,177 --> 00:27:39,737
There's no way to declare an like
a keyboard extension or a share

483
00:27:39,737 --> 00:27:41,747
extension inside of a Swift package.

484
00:27:43,127 --> 00:27:47,717
and app extensions are one of the areas
that we're actively working on right now.

485
00:27:47,837 --> 00:27:50,297
There was actually someone from
the community who contributed a PI

486
00:27:50,297 --> 00:27:53,417
for this, which is amazing to see.

487
00:27:53,477 --> 00:27:56,957
You know, this is just a few weeks
into Swift, into being released.

488
00:27:57,317 --> 00:27:58,337
And someone built out.

489
00:27:58,337 --> 00:28:00,492
All of app extension support for us.

490
00:28:00,592 --> 00:28:04,702
And I've been working with them
on polishing that up and planning.

491
00:28:04,792 --> 00:28:06,112
I'm planning to land that soon.

492
00:28:06,532 --> 00:28:10,372
But, yeah, this was, this is something
that you add to your xTool YAML

493
00:28:10,372 --> 00:28:13,102
file where you say, here is the.

494
00:28:13,357 --> 00:28:16,657
Swift package product that
corresponds to your main app.

495
00:28:16,987 --> 00:28:19,927
And here are the Swift package
products that correspond to

496
00:28:19,927 --> 00:28:21,457
different app extensions.

497
00:28:21,817 --> 00:28:23,887
And that's basically all
you need to do there.

498
00:28:24,097 --> 00:28:28,967
And then when you do extra dev after that,
it'll bundle all of those things together.

499
00:28:28,967 --> 00:28:31,637
It'll build all of those products
and then better them for you.

500
00:28:32,085 --> 00:28:32,475
Okay.

501
00:28:32,685 --> 00:28:35,055
And then what did you
say about what platforms?

502
00:28:35,265 --> 00:28:37,665
Does it just use deployment
target for that or what?

503
00:28:38,602 --> 00:28:43,482
So at the moment it's more like,
it's based on what command line

504
00:28:43,482 --> 00:28:45,072
flags you pass to external dev.

505
00:28:45,155 --> 00:28:45,755
Oh, okay.

506
00:28:45,905 --> 00:28:46,235
There we go.

507
00:28:46,962 --> 00:28:50,922
yeah, so, so right now it
just assumes iOS by default.

508
00:28:51,182 --> 00:28:57,167
Like iPhoneOS SDK if you wanna build
for the simulator, there's just a.

509
00:28:57,642 --> 00:29:00,042
Dash simulator flat that you pass.

510
00:29:00,552 --> 00:29:05,352
And, I realized that's designing me
into a corner when it comes to other

511
00:29:05,352 --> 00:29:08,152
simulator types or other platform types.

512
00:29:08,212 --> 00:29:11,812
But, you know, right now
we're just starting with iOS

513
00:29:11,812 --> 00:29:13,312
support to keep things simple.

514
00:29:13,432 --> 00:29:19,997
But you know, if we wanna do watchOS,
visionOS, tvOS, macOS all of those things.

515
00:29:20,057 --> 00:29:23,297
You can, we'll probably just
add a flag that you can pass in.

516
00:29:23,575 --> 00:29:24,265
that makes sense.

517
00:29:24,925 --> 00:29:29,715
One of the things that is really
cool is so not only do you

518
00:29:29,715 --> 00:29:31,815
support not only do you support.

519
00:29:32,815 --> 00:29:38,835
Simulator, but you can build on device
and deploy on device and debug on device,

520
00:29:39,435 --> 00:29:43,815
and it uses, remind me what the name of
the tool is that you have to install.

521
00:29:44,032 --> 00:29:46,597
So, there's a tool called Lib iMobile

522
00:29:47,055 --> 00:29:51,015
Yeah, so explain how like the
whole USB thing works on Linux and

523
00:29:51,015 --> 00:29:52,185
how you're getting that to work.

524
00:29:52,185 --> 00:29:54,945
So you can debug an app on device.

525
00:29:55,837 --> 00:29:59,647
So I will add, just to preface
that debugging in particular

526
00:29:59,647 --> 00:30:01,237
is one of the trickier areas.

527
00:30:01,237 --> 00:30:05,167
There's actually been some major
changes to Apple's debugging stack

528
00:30:05,167 --> 00:30:06,517
over the last one or two years.

529
00:30:07,297 --> 00:30:09,607
So as if iOS 17 it.

530
00:30:09,967 --> 00:30:13,357
Is something that doesn't
work with xTool, but you can

531
00:30:13,357 --> 00:30:15,477
install apps, onto your device.

532
00:30:15,787 --> 00:30:19,667
And before that up until I was
16, it's really possible to

533
00:30:20,267 --> 00:30:22,037
launch and debug apps as well.

534
00:30:22,087 --> 00:30:25,547
And again, this is something that we're
working on, it's that there's other

535
00:30:25,547 --> 00:30:27,107
third party tools that have solved this.

536
00:30:27,107 --> 00:30:30,547
But to come back to, you know, the
crux of this, which is how do we

537
00:30:30,547 --> 00:30:32,407
do installation in the first place?

538
00:30:32,717 --> 00:30:37,577
Again, a huge part of this is
basically emulating, what Xcode does.

539
00:30:37,967 --> 00:30:41,687
And when you connect your device
via USB it actually opens up

540
00:30:41,687 --> 00:30:43,967
a port on your iOS device.

541
00:30:44,005 --> 00:30:44,305
That makes

542
00:30:45,467 --> 00:30:48,197
and, it creates like this tunnel.

543
00:30:48,337 --> 00:30:52,347
And it basically talks to
it over, you know, dCP.

544
00:30:52,557 --> 00:30:58,207
So there's this protocol called,
lockdown D and the way the lockdown

545
00:30:58,207 --> 00:31:04,267
D works is you send over from your
Mac, you basically connect to this

546
00:31:04,567 --> 00:31:08,897
particular port on your device, and
you send over this buddy, which is.

547
00:31:09,692 --> 00:31:14,102
You ask it to open a service,
and there's a list of services

548
00:31:14,102 --> 00:31:16,502
that, lockdown d supports.

549
00:31:16,722 --> 00:31:22,382
For example, there's a service
called apple File Conduit A FC and

550
00:31:22,412 --> 00:31:26,532
that allows you to transfer files
between your Mac and your phone.

551
00:31:26,952 --> 00:31:30,252
So, you know, we first open up
an Apple file conduit service.

552
00:31:30,462 --> 00:31:33,162
We transferred over the, IPA file.

553
00:31:33,592 --> 00:31:35,992
there's another service
called Installation Proxy.

554
00:31:36,482 --> 00:31:38,912
We open that up and then we
point it to the file that we

555
00:31:38,912 --> 00:31:42,782
install, that we just transferred
over, and we say, install this.

556
00:31:43,052 --> 00:31:46,222
And, that in, in the gist of it is.

557
00:31:46,762 --> 00:31:49,522
Basically what we do, there's
a lot of other work that of

558
00:31:49,522 --> 00:31:50,782
course, in terms of pairing.

559
00:31:50,992 --> 00:31:54,262
You know, there's like
pairing is all SSL stuff.

560
00:31:54,362 --> 00:31:58,682
But, A lot of this work is
handled by Lib I mobile device.

561
00:31:58,762 --> 00:32:04,852
And in fact, if you have a Linux machine
and, you ever connect your phone, your

562
00:32:04,852 --> 00:32:08,302
iPhone, to a Linux machine and you
see like your phone pop up on that,

563
00:32:09,022 --> 00:32:12,592
the reason that your Linux machine can
talk to your iPhone is because Lib I

564
00:32:12,592 --> 00:32:14,422
Mobile device is installed by default.

565
00:32:14,520 --> 00:32:14,870
Right.

566
00:32:15,020 --> 00:32:15,310
Okay.

567
00:32:16,207 --> 00:32:20,842
so it's one of the, it is a very well
maintained package and it's well tested.

568
00:32:20,992 --> 00:32:23,452
It is written in C which is unfortunate.

569
00:32:24,365 --> 00:32:25,925
What's most of this stuff written in?

570
00:32:25,925 --> 00:32:31,295
Is it written in c plus or what
do you use or Swift or what

571
00:32:31,882 --> 00:32:35,772
So Lib iMobile device, and some of
the dependencies that we have are

572
00:32:35,772 --> 00:32:42,792
written in C but, all of, xTool itself
is written in Swift, in fact, yeah.

573
00:32:42,792 --> 00:32:48,492
So it's like pure Swift and like
a little bit of like c to bridge

574
00:32:48,492 --> 00:32:50,232
between some of these things.

575
00:32:50,332 --> 00:32:53,212
How has the bridging
been between C and Swift?

576
00:32:53,902 --> 00:32:58,192
And is anything with like Xcode
six two help or Xcode six two

577
00:32:58,662 --> 00:33:01,902
Swift 6.2, has that helped at all?

578
00:33:02,854 --> 00:33:04,419
do you mean the c plus ended up,

579
00:33:04,487 --> 00:33:07,677
Yeah, sorry, c plus and the
fact that we now have in was it

580
00:33:07,677 --> 00:33:09,597
inline array and span and stuff?

581
00:33:10,489 --> 00:33:10,639
Oh, right.

582
00:33:10,819 --> 00:33:14,569
I haven't used any of the new
stuff, the inline and span stuff.

583
00:33:15,204 --> 00:33:17,929
'cause we're still trying to
support six one and six zero.

584
00:33:18,169 --> 00:33:21,499
For like building, but I
am very excited about that.

585
00:33:21,709 --> 00:33:24,259
The bridging in general has
been pretty nice actually.

586
00:33:24,429 --> 00:33:27,729
As part of ex two, the way that we
talked it, the way that we interact

587
00:33:27,729 --> 00:33:32,229
with Lib iMobile device is I built this
library called Swifty Mobile device.

588
00:33:32,679 --> 00:33:37,389
And it's basically just a Swift
apple around lib I mobile device.

589
00:33:37,719 --> 00:33:41,469
And you know, we have like some
actors in there to allow for

590
00:33:41,469 --> 00:33:43,299
like nice skin currency stuff.

591
00:33:43,639 --> 00:33:50,089
I think, one of the biggest nightmares
for us, for me was really like when,

592
00:33:50,569 --> 00:33:55,119
Swift six came about and then Swift like
had the whole strict concurrency mode.

593
00:33:55,719 --> 00:33:57,729
And just dealing with concurrency errors.

594
00:33:58,849 --> 00:34:03,649
And all of the trash that's come around
with, you know, like every single release.

595
00:34:03,649 --> 00:34:07,679
Having new concurrency errors to
deal with has been a bit difficult,

596
00:34:07,769 --> 00:34:10,319
but, I have actually fixed some.

597
00:34:10,959 --> 00:34:13,449
Completely valid race
conditions because of it.

598
00:34:13,449 --> 00:34:18,549
So I will say it, it's like you gotta
eat your medicine to an extent that,

599
00:34:18,969 --> 00:34:22,509
that a ways the medicine could have
been made nicer, but I think they're

600
00:34:22,509 --> 00:34:24,159
moving in the right direction now.

601
00:34:24,609 --> 00:34:29,369
And with bridging in general, x ft.
Mobile device was also treat to work on.

602
00:34:29,439 --> 00:34:34,074
fact, I released, I shared Swifty
mobile device with some folks a

603
00:34:34,074 --> 00:34:39,474
while ago, and I believe at the
moment it's currently used with, if

604
00:34:39,474 --> 00:34:42,454
you've seen, Gui Rambo's AirBuddy.

605
00:34:42,664 --> 00:34:45,304
so that uses Swifty mobile
device under the hood, or it

606
00:34:45,304 --> 00:34:47,044
used to for a bit at least.

607
00:34:47,354 --> 00:34:50,354
And another really nice tool
called re incubate camo.

608
00:34:51,014 --> 00:34:54,334
And, That is something that's
existed for a few years and

609
00:34:54,334 --> 00:34:57,904
is, in fact, it was featured by
Apple recently, which is awesome.

610
00:34:58,354 --> 00:35:00,924
So that also uses Swifty mobile device.

611
00:35:00,934 --> 00:35:06,424
You know, it's, it's a, you know,
validated library to that extent.

612
00:35:06,424 --> 00:35:08,554
And Bridging has been
very nice to work with.

613
00:35:09,607 --> 00:35:10,627
So two things.

614
00:35:10,687 --> 00:35:16,297
One, have you ever, would there ever
be a way to remote as, as a developer

615
00:35:16,297 --> 00:35:18,247
of a VM app, I should say bushel?

616
00:35:18,587 --> 00:35:22,307
would there ever be a way to com do
remote debugging from Mac to Mac?

617
00:35:23,307 --> 00:35:24,247
Jim Mcac.

618
00:35:24,672 --> 00:35:29,202
We should talk about this offline then,
that's something I would love to have.

619
00:35:29,862 --> 00:35:30,732
And secondly

620
00:35:31,399 --> 00:35:33,739
I don't have an answer for
you immediately on the Mac to

621
00:35:33,912 --> 00:35:35,142
Immediately, okay.

622
00:35:35,172 --> 00:35:35,202
Okay.

623
00:35:35,702 --> 00:35:39,692
Did you ever try debugging
on a Apple Watch?

624
00:35:40,692 --> 00:35:41,412
not yet.

625
00:35:41,592 --> 00:35:42,342
Not yet.

626
00:35:42,680 --> 00:35:44,090
it in any way, please?

627
00:35:44,090 --> 00:35:44,690
Because the

628
00:35:44,742 --> 00:35:45,417
I hope so.

629
00:35:46,400 --> 00:35:47,420
is pretty bad.

630
00:35:47,465 --> 00:35:47,755
Okay.

631
00:35:47,760 --> 00:35:50,700
Le mobile device supports,
watch connectivity.

632
00:35:50,700 --> 00:35:52,080
I believe so.

633
00:35:52,300 --> 00:35:52,960
It's possible.

634
00:35:52,960 --> 00:35:52,990
I.

635
00:35:53,539 --> 00:35:57,139
Yeah, it's possible, but is
it better than what we have?

636
00:35:57,239 --> 00:35:57,599
Okay.

637
00:35:57,969 --> 00:35:59,719
a couple of things before we close out.

638
00:35:59,719 --> 00:36:02,379
I wanted to know what's next for xTool?

639
00:36:03,679 --> 00:36:03,889
sure.

640
00:36:04,189 --> 00:36:08,929
So I feel like, this is that
there's so many, you know, so

641
00:36:08,929 --> 00:36:10,399
many requests that are open.

642
00:36:10,399 --> 00:36:12,679
There's currently like five
different fis that are open, and

643
00:36:12,679 --> 00:36:16,934
I think we have, I. We, we touched
upon some of my future plans here.

644
00:36:17,324 --> 00:36:19,834
You know, one of them is
definitely to figure out the

645
00:36:19,834 --> 00:36:21,754
right way to go about CI support.

646
00:36:22,834 --> 00:36:26,614
'cause yeah, I mean, in an ideal
world, you could just take any iOS

647
00:36:26,614 --> 00:36:31,564
app and, switch your Mac Runner
for Linux and just have it work.

648
00:36:31,954 --> 00:36:35,944
But, you know, more than that, i,
I would also I'm just very excited

649
00:36:35,944 --> 00:36:38,524
about the educational opportunities.

650
00:36:38,624 --> 00:36:42,684
And that was really like why I
created xTool to begin with was

651
00:36:42,707 --> 00:36:43,637
like all of us.

652
00:36:44,154 --> 00:36:48,504
yes, you know, so many people like
have, the tools to work with to

653
00:36:48,594 --> 00:36:54,144
build iOS apps and this gradually
lower the value for them, right?

654
00:36:54,324 --> 00:36:57,824
And, you know, a big part of that
would definitely be if we supported

655
00:36:58,004 --> 00:37:01,064
export project to, to a conversion.

656
00:37:01,474 --> 00:37:05,374
So that's something again, talking
to the twist folks to see if we can

657
00:37:05,374 --> 00:37:07,174
use some of that technology for that.

658
00:37:07,302 --> 00:37:08,172
Yeah, that would be great.

659
00:37:08,209 --> 00:37:09,709
That would be awesome.

660
00:37:10,059 --> 00:37:13,869
And then, you know, app extensions
are another really cool thing that

661
00:37:13,869 --> 00:37:15,579
would, that I'd love to support.

662
00:37:16,059 --> 00:37:16,539
Let's see.

663
00:37:16,569 --> 00:37:20,249
What else are we you know, again, there,
there's actually one of, one of the

664
00:37:20,249 --> 00:37:23,359
limitations, is support from macros.

665
00:37:23,469 --> 00:37:28,309
So at the moment, One of the few
things that doesn't work is some of

666
00:37:28,309 --> 00:37:32,449
the proprietary macros, like, some
of the Swift UI stuff, like at entry.

667
00:37:32,779 --> 00:37:37,429
So I, I would say like at Observable
works fine because that's open source and

668
00:37:37,429 --> 00:37:39,879
it's compiled into the LinuxTool chain.

669
00:37:40,479 --> 00:37:44,819
But yeah, some of these macros don't,
so I'm, I'm working on liability.

670
00:37:45,499 --> 00:37:49,889
Yeah, so I'm working on a library
that re-implement like, at entry

671
00:37:49,889 --> 00:37:56,099
and at, at Animatable or whatever
the new Swift UI macros are.

672
00:37:56,369 --> 00:37:59,699
So that's, that's one of the
things that is coming up.

673
00:38:00,069 --> 00:38:02,679
And yeah, just in general, you
know, like having community

674
00:38:02,679 --> 00:38:04,629
contribution is always amazing.

675
00:38:04,629 --> 00:38:05,949
So, I'm.

676
00:38:06,594 --> 00:38:07,914
I always open to fi there.

677
00:38:07,914 --> 00:38:12,814
There's a whole roadmap if you look
at the project section on xTool And,

678
00:38:13,414 --> 00:38:18,124
you know, if anyone is interested in
contributing that I always appreciate it.

679
00:38:18,244 --> 00:38:23,104
One other big thing actually
is, support for alternative.

680
00:38:23,154 --> 00:38:27,564
Tools like flatter and React,
native and Gotland multi-platform.

681
00:38:27,984 --> 00:38:34,914
And, I, I was very surprised to see this,
but like xTool has create, has generated

682
00:38:34,914 --> 00:38:37,134
a lot of traction in those communities.

683
00:38:37,854 --> 00:38:37,884
I.

684
00:38:37,967 --> 00:38:38,827
It kind of makes sense.

685
00:38:39,459 --> 00:38:44,159
Yeah, I think I, I, my understanding is
the reason for that is that, a lot of

686
00:38:44,159 --> 00:38:47,909
people in those communities are the ones
who currently build apps that they would

687
00:38:47,909 --> 00:38:52,259
like to support iOS and they'd like to
test with iOS, but they can't because

688
00:38:52,259 --> 00:38:53,699
they don't have the tools to do it.

689
00:38:54,359 --> 00:38:58,859
So yeah, you know, just, doing that
sort of thing would be super awesome.

690
00:39:00,082 --> 00:39:02,752
Well, Kabir, thank you so
much for joining me today.

691
00:39:02,862 --> 00:39:05,292
Was anything else you
wanted to mention before we

692
00:39:05,419 --> 00:39:07,384
I, I think, I think that's about it.

693
00:39:07,422 --> 00:39:07,872
Okay.

694
00:39:08,562 --> 00:39:09,942
where could people find you online?

695
00:39:10,724 --> 00:39:17,984
You can find me on, Twitter at,
Kabir, that's K-A-B-I-R-O-B-E-R-A-I,

696
00:39:17,984 --> 00:39:22,094
or for that matter, basically all of
my other socials are just by name.

697
00:39:22,552 --> 00:39:24,052
And we'll put links in the show notes.

698
00:39:24,052 --> 00:39:24,357
Of course.

699
00:39:24,884 --> 00:39:25,214
Yeah.

700
00:39:25,244 --> 00:39:29,694
And, you can also check out
my website at ro vi.com.

701
00:39:30,134 --> 00:39:34,754
Has not been updated since
2019, but have links in that

702
00:39:36,157 --> 00:39:38,137
It never, it never quarantined.

703
00:39:38,137 --> 00:39:38,527
Wow.

704
00:39:39,037 --> 00:39:40,957
Well thank you so much,
Kabir, for coming on.

705
00:39:41,287 --> 00:39:43,897
and congratulations to your, your degree.

706
00:39:43,987 --> 00:39:44,677
This is awesome.

707
00:39:44,714 --> 00:39:46,394
thank you so much for having me.

708
00:39:46,867 --> 00:39:51,902
People can find me, at bright
digit.com is my company's website.

709
00:39:52,492 --> 00:39:58,432
And I'm on social media, Leo g Dion, check
all the socials there and the links below.

710
00:39:58,852 --> 00:40:02,632
If you really enjoyed this episode,
please think about, subscribing.

711
00:40:02,752 --> 00:40:04,312
And we also have a Patreon.

712
00:40:04,772 --> 00:40:08,672
Thank you to all Patreons
for supporting this program.

713
00:40:09,722 --> 00:40:13,322
And if you have an idea about something
you wanna talk about on the show,

714
00:40:13,322 --> 00:40:15,242
please reach out to me and let me know.

715
00:40:16,147 --> 00:40:18,727
And if you're listening to this
on a podcast player, of course,

716
00:40:18,727 --> 00:40:20,357
please and and subscribe as well.

717
00:40:20,657 --> 00:40:23,447
Thank you for joining me, and I look
forward to talking to you again.

718
00:40:23,507 --> 00:40:24,107
Bye everybody.