NativePHP for iOS with Simon Hamp

So Simon Hamp is back on the show last

time he was here. We talked

about native PHP this time

He's got a brand new thing native PHP

iOS. So welcome back

Simon. Thanks for having me Eric

It's so good to be back. It's good to see

you again. Yeah, you too. So I

Think at first we thought native PHP was

crazy and you're just like

no that's not crazy enough

So we're just gonna go full bore into

mobile development. So so

how did this come about?

Where do I begin? Well, I mean obviously

it starts with native PHP

because none of this would

have happened without that but

Basically last year I was looking into I

was looking into doing something that

probably I shouldn't have

Shouldn't do which is like how can I run?

PHP without a web server behind it and

the reason for that was

kind of like I'm looking into

building all of this stuff for native PHP

for the desktop stuff and

And doing it without web servers and then

it kind of dawned on me

I was like, you know, I think this is

gonna work on a phone because

Now we haven't got to run a web server.

It's so I started investigating all of

that and I'm like, oh

actually I can't run

Like PHP as an a separate executable on

the phone. So I start to investigate like

how do I do this as a

embeddable PHP and

And all these pieces just start to fall

into place and then I'm

like, do you know what?

I think I'm gonna

just hold here for a bit

And I'll just seed a few people with the

idea of like, maybe we can do this

You know talk to Marcel about it

I was like, I think we can do this and we

were at Laricon US and I

mentioned it to a few people

There's some people in the community who

have been on at me like when is it gonna

be ready for mobile?

And I'm like, oh

And I said to them I think I've cracked

it, you know, like I

think we're we're nearly there

and

Coming back from Laricon US. I was like

Well the the Laricon EU

Call for papers, you know call for talks

opened up and I was like, all right

I'll just put a talk in like the really

Smallest brief that I could write for a

talk was like building mobile apps with

PHP and then like months later

I have completely forgot about it. I was

just like, okay, I'm

not gonna do anything

I'm gonna wait till I hear if I get

anything back on this talk

and if they say no, that's fine

But to my surprise Kaneko came back to me

like out of the blue

a couple of months ago

He was just like

really like your talk idea

Do you still want to give

it and I was like hell? Yes

I want to give it but I haven't built any

of the stuff that I

said that was gonna build

So now I've got to go and figure that out

so I finally kind of knuckled down over

like the holiday period and just

Smashed out this thing and I was like

couldn't believe that it actually worked

And yeah, then I started sharing more and

more stuff about it just

like leading up to my talk

so that's kind of how it came to life,

it's probably been a

year in the making and

Quite a lot of work to get there. But

Got the so yes you so basically he by

accepting the talk you had a deadline

So at that yeah, it's had to get

something done, right?

Can echo got his whip out and started

Giddy up

that's funny, so

As far as like the back end

on on how this actually works

So you write in PHP you can

use a lot of wire of course

I guess CSS normal CSS like tailwind or

something and then it compiles itself

into an Xcode thing or

I guess I don't know how that works like

what what actually runs on iOS

So it's an Xcode project that gets

kind of bundled together

But your your Laravel app gets kind of

injected into the Xcode

project and then I'm not like

transpiling any PHP code into

Swift or any other language. It's still

running as PHP code. So

Your actual Laravel project goes on to

the phone and it runs as

PHP would on the server kind of

but on the phone

so it's what's happening is the

PHP engine has kind of been embedded into

the app and so when the app

sees like you're asking it to

Basically kind of make a request to PHP,

you know, which Laravel

does very very by default

It kind of boots up the PHP engine runs

the whole Laravel application through the

engine as it normally

would and then just gets the

HTML and the headers back and kind of

injects all of that response into a web

view and it does it without

Without the web server I'm saying

earlier. So there's no there's no

Processes that are sort of hanging around

on the device trying waiting for

requests. It literally just goes

Oh, there's a you want this I'll spin all

of that up and then finish

that and then here you go

which is

Good, you know like for me that's cool

because now I can take all my Laravel

stuff and I can just do it on the phone

But yeah, this it's not

native in the sense of

You know building a like native UI

components yet, but it could get there

Yeah

what about

I know you said it's sort of like bundles

sort of a version of PHP.

What about like a database like

What's your idea there is

is it gonna be able to like?

Use whatever the iPhone storage is or

you're just like doing more like API

calls back to some other thing

You you've got kind of choices there

I think when when people think about

Laravel they think I can connect to my

sequel or Postgres or

all these other drivers and

But you have to kind of get into the

mindset of I'm

building a client application

You know, my Laravel app is really a

client to something else potentially

I mean, it could be

just completely standalone

But if you're thinking, you know, I want

to run Postgres somewhere

Let's say like you've got a service

running on Laravel cloud

And you've got a Postgres database

you

Absolutely do not want to be connecting

your client applications

Which could be installed on hundreds or

thousands of phones in

theory all to that one database

without any kind of

intermediary so you'd want it to be going

through an API that you've got

authentication going on and you can

Tell who's doing what and you know?

give out tokens that you can expire and

all of those kinds of things and just

have like a good

level of control that the

Database server just won't give you by

default without, you know a lot of work

So in that scenario, you should pretty

much always be thinking

like it's going through an API

But because it is just a file system

On the phone you can have a like a sequel

light database running on there and it

comes with sequel light support

so, you know, and Laravel's done a lot of

work in the last couple of years to

Make sequel light

support like a real first-class

supported solution, so

It's actually great for that now and it

works really really well. So you can have

a local database that you're

Updating with like eloquent models and

you know using

migrations and stuff on the device

Which just feels like

you're right at home in

Classic Laravel world, which is great

That's sweet. Uh, what about so

What is like the best use case

You know

Sort of this is sort of my thinking the

way you're kind of describing it

Like it's never gonna be like you can

never like build little

games or something with it

But it's more like B2B apps

things like that or is it?

Hmm

Yeah, what's your thoughts there the

first app that is you know

The app that I built that went through

the App Store that Apple have approved

Is a game technically. I mean, it's not

like three-dimensional

stuff but

There's actually a project called PHP GL

Something PHP GLFW or

something like that and it's like

They're trying to make open GL

drivers in PHP and all of this

so I can kind of see a point in the

future where that

could be possible because

there's nothing really preventing you

from connecting to the the hardware and

running all of that

kind of I mean, it's just

More maths really, you know, like more

calculations that happening

But should you do that

in PHP I don't know I

Think people will definitely go we're

trying to build a

really performant game here

Let's use like the proper frameworks that

are available on the

platforms whatever but yeah

Business apps. I mean I can see like

potentially businesses that have they've

already got like

their service like a sass

And then they want this kind of side car

Application that's

installable on the phones

So, you know, they might not ever

Sell that app through the store. They

might not ever do anything that kind of

directly generates revenue from that app

But you know, it's a

feature of their entire platform

And then you know

You could get going basically if you had

a team of like one or

two Laravel developers

And he didn't want to invest in hiring

like Swift developers and Kotlin

developers or react native developers

You got a team now that

can build a native app still

with their

Existing Laravel skills, which I think is

super powerful and and cool

But I do think another thing is like

people just have these ideas, you know

They I've talked to friends over the last

few weeks and they're like I've had this

idea for an app and it's like

Yeah, but you know

You don't really know how to code and you

don't know how you're gonna have to learn

all these languages and

tools and things and it's like

I can't build it for them because I

didn't know Swift and I

didn't know these other languages

But now I can because I already know like

Laravel and PHP so I can just go

Oh, actually, let me just you know and a

day later. It's like here's your app

That's quite cool. I

think that's gonna be

Empowering people to kind of try new

stuff out and bring new

ideas to life. Hopefully

Yes, I think that'll be great

I was you know, I was just thinking my

own use case like it'd be sweet just to

have a little little news app

OS app, I don't know

who would download it

But you know it would be neat to have

that as an option at some point, you know

Or a golf app. It's like no, you've

probably got loads of good golf apps

You know, I don't know

It would be cooler to to hook into we've

actually made another

buddy talked about this before

It's like have an iOS app where we can

like video your swing

and then we hook into like

Chat GPT or one of the AI stuff and it's

like this is what you're doing wrong

You should probably work on you know

Here's some training aids and something

like that might be kind of cool and you

could probably do that

through something like this

Because it would just be

connecting through API's

Yeah, I guess because I did see you take

a picture on on stage

So it's definitely possible to hook into

the camera, right? Uh-huh

I mean videos are different beasts

but I think what you know what you're

talking about is essentially like you

capture a bit of video and

then you want your app to

take that file and

Automatically sort of process it through

some other API and get some

data back, you know, it's like

Yeah, you could like

that's just very basic web API

Interaction stuff so you could totally do

that with Laravel now

and that's very very cool

Potential stuff that

could come from this. Yeah

Yeah, I agree and well even you know,

talking about more sale and beyond code,

you know having a tinker

well on your phone that

That could be kind of interesting. I

don't know what you do with it, but you

could play around with PHP

You know as you're as

you're doing something

Yeah, or or more of like an iPad app or

something. I don't know but but yeah,

that's that's very cool

So, so what do you think I know right now

you're iOS only but you do have it that

you're trying to get the Android

Anything else like big that you're

wanting to get done before

before the first release. I

Mean, there's loads of API is that I want

to you know, I'm

working on getting working

so that they're usable and

One of the things I didn't get to do

before my talk which

I hoped I'd have time

But didn't was to kind of

wrap it all up in the nice

We've got quite a nice API now for native

PHP for the desktop stuff and like the

packages are kind of

stable and all of that

So I want to bring some of that stability

across to this kind of straight away

so we get all of that for

free in some respects and

You know, it'll be nice then to have this

you'll have like ID support and all of

the IntelliSense things

are gonna be nice and working

Yeah, I mean I showed off some of the

camera stuff but there's a bit of work to

do to make that

really smooth and get video

And all of those things going but I think

some of those things definitely

But there's a couple of things that come

to the top of the list for people always

push notifications is one

because people basically

people want to be able to

Make the the thing kind of remotely

sensitive to the stuff that's happening

in their application

Environment elsewhere

which makes perfect sense

And another one is in-app purchases. I I

haven't ever looked into stuff like that

before but I think it would be

really cool if you could have a

Laravel app that somebody can go into and

they can just trigger like the you know

Apple pay to purchase something and and

that flow just does what it

does and then I don't know

Maybe it unlocks something in your app or

maybe it's like taking an

order for fast food restaurant

who knows but

Kind of the fact that that then could be

done in Laravel is just

super cool and opens the door to

You know people businesses generating

revenue off of this thing, which is

awesome. So I'd really

like to get that done

But yeah, there's just so much more

there's loads and loads of stuff that I

want to do this is so cool

So so that that does sort of bring

another question in as far as like when

you're developing locally

You can since it's PHP

You can just run like PHP unit pass

Sort of the whole normal testing suite or

you have to like get fancier with how

you're gonna test all this stuff

No, so obviously when you're talking

about like

potentially hitting native APIs

They're not going to be available if

you're just running your test suite in

the terminal because

you're not running on the device

you're not testing on a real device, but

We already have that again in

native PHP for desktop where

You might not be running all of your

tests inside the browser and you know

kind of the web view environment

of electron and so we we basically have a

whole bunch of mocks and

you know fakes that can

Swap in at test time. So yeah, it's not

it's not going to be

testing the real stuff

But it's not going to prevent you from

having really

reasonable tests against those

Apis and kind of what your

expectations are going to be

That's coming through really well and a

lot of that's been thanks to

contributors, you know

Giving of their time and making that

stuff because I haven't

had the time to do that

So, you know

I think at least to that side of things

the communities really come forward and

kind of helped make all

of that possible and I

Think we can take a lot of the principles

of that and bring it over to the iOS

stuff as well. Definitely. No, no doubt

sweet

another question is there any

Sort of performance implications for

using native iOS versus I guess Swift

I assume there might be but yeah, is it

super noticeable or is

it still pretty quick and

I I think it's noticeable because I'm

maybe a bit more sensitive to that

Basically like understanding what's going

on under the hood helps here so

for every request that you expect your

Laravel application to kind of

handle and respond to

We've got to boot PHP up

completely from scratch

I mean, it's not even like on a web

server where you might have

op cache, you know or

Processes like in PHP FPM in engine X I

don't get to tell you but you know, you

have processes that are just there

They're ready. They're

waiting to serve requests

And so when a request comes into the web

server it goes which one of you is free

Do this thing and because it's already

there and waiting it's kind

of super fast in this world

We can't spin up processes and have them

just waiting around for

the user to do some stuff

So we literally have to spin PHP up right

from the beginning on every single

request at the moment

Which you know, like there is just

overhead to doing that every time

There's some things that

we can do to speed that up

I do think we can get up cache going at

some point and I think I already started

exploring some of the

Putting pH 3 PHP in a thread on the

device, which you know swift and and this

they can all support

multi-threaded

applications so in theory at least it

could be possible to have like the PHP

Process just kind of it's not processed

but the the engine just like primed and

ready, you know, like

kind of ticking over

Waiting for the next request and then and

then it will be a lot lot faster

but I will say like right now it's not

It's not too slow. It's not like you tap

the button and then you're like

You know waiting for something to happen

It does react quite quickly

But it is a bit I will say it's a bit

slower than you know

If you've got native UI and you've got

it's just running native code directly

because well you've

got all this extra stuff

that's happening so

yeah, it probably adds like a

150 to 300 milliseconds to the whole

thing which you know on occasions it can

feel a little bit slow

Gotcha, yeah, it sort of reminds me of

you remember the old day. Well, you're

probably not old enough

to know the old days but

So the old days with you know, we were we

would build web apps and it was like

Oh, you've got a you've

got to compress all this down

You know the extra 10 kilobytes is gonna

dial up, you know, you

would check you would have to

You know toggle the the thing in your

browser to simulate

dial up and all that stuff

It's like, you know now it's like if you

know if my if even on my cell like only

just being on the browser

It's like it's still quick. It's crazy

how much faster everything it's just

gotten over the years. So that's

So, you know hundred to three hundred

milliseconds probably is not that bad

For now, I should be building

People who are used to building stuff on

I you know, like on an iPhone that iPhone

app developers will go

Oh, man, this is slow, you know because

they're so used to be

it being instantaneous

Especially when you're not making network

requests, you know, we're not going out

to the network. So it

should be really fast

but my kind of counter to it is this is

very early stage and

We'll get there

I think it's never going to be as fast as

truly native because it just can't be

there's too many layers of stuff going on

In between but I think we

can we can squeeze it down

So that it's almost as good as and I

think it's good enough right now

And I think that's fine for

a lot of use cases, you know

I think there's a lot of a lot of

businesses a lot of agencies

that will find that very very

acceptable, you know, so

Hopefully anyway

Yeah, that makes sense.

That's perfect sense. Um, so

Any features or anything that I did not

ask you about that you want to make sure

we get covered on this

Yeah, I mean I guess one of

the things that I have been

thinking about and I was talking about

with somebody yesterday even is

The whole ecosystem of of building stuff

Like mobile apps along with a server

based application, you know

And this kind of you're building all of

these tools and you fit them all together

and they're all in different things

You know, you might have

react native mobile apps

So you can do it cross-platform on iPhone

and Android and then maybe on the server

You've got Laravel and

maybe some other bits and pieces

But generally, you know, you're

communicating with like a Laravel API and

I just I've always felt

I've done that for years

And I've always felt it's a little bit

disjointed because not only

if you're gonna have these

teams of different people

with different skills and

you've got to come up with these

mechanisms for these systems to

communicate with each other and you've

got to document all of that stuff and

You you've got people doing diagrams and

writing docs and it's going out of date

and you know, all of the things I

Think having Laravel on

both sides of the equation

Really has the potential to unlock

something incredible that I don't I don't

see many people talking about

maybe I'm being ignorant but

Where you you just forget about the API

all together and these things just click

together and they just work

So you can just go I install this package

over here in my iPhone app

And I install kind of the counter version

of that for the server on the server app

And now they can just talk to each other

like securely like best practice safe and

everything and syncing data

You know between the two and you're just

using eloquent on both sides

And you're just like you don't even care

like is it talking to the API or is it

talking to the local database?

I don't know. It doesn't matter because

it just works, you know

It's like I've never had it that easy and

I think that I meant

like this far away from

Doing something like that and I just that

feels to me like a killer

opportunity to tap into for people

So like I see this is like

a Foundational technology, you know getting

these pieces to work

But then the real stuff is when you can

go these all things fit together. So

that's gonna be really cool

Yeah, that's gonna be it's it's gonna be

powerful. I you know the

Feedback I've seen just on the native PHP

original is

Super positive and everybody seems to

like like it outside of a couple

of

Community places that I'd rarely visit

But all the feedback

I've heard it really good

Tons of potential I

Like that when you said native PHP

original it made me think of Pringles

This is the you got desktop was like the

red tube of Pringles

What should the what

should the mobile one be?

Sour cream and onion because it's got you

got the green in the

That's good, I like I was thinking maybe

like the what's the spicy one or paprika

or something, you know

We might not have those here in America

or I've not seen those it's I've seen

it's the basic version of Pringles

It's like playing barbecue

sour cream and salt vinegar. No

You're missing out to get you need to get

into European shores

and try a paprika Pringles

You know, it's this is Tony I'm the

subject but Paul that

You know does a lot of

writing on the liberal news

He's he's one of these chip connoisseurs

and he just tries to

find the wildest chips

He can find it eats them and I'm like,

it's like ketchup and you

know pickle ketchup. I'm like

None of that

In the UK there was like one of the

common flavors, you know

I mean you get them bolty pack flavor of

crisps, you know, and it's got salt and

vinegar and it's got the salt it you know

and just

Cheese and onion and then the one was

always in there was prawn cocktail

What nobody loves this it stinks

That just sounds like the name itself

just sounds terrible. It's

like I would never want this

That's hilarious. Oh

I got a meatball chip. Yes, so that's

great. Yep. Kind of sore official. Yes

Y'all get y'all can start mailing it back

and forth, you know

different flavors of nasty chips

All right, yeah pin pals

All right, let's get back on topic

We'll go down we'll go

down a spiral here in a minute

but uh, so

I guess as far as the release goes

When are you thinking you another couple

months or you're thinking

fairly soon on your release date?

Don't like the official thing or or

what's your feeling right now?

um, I mean there is a lot

that I want to build in but

that's kind of like it'll come and it

will keep refining and there'll always be

more because there's there's a

Huge API footprint that we've got to kind

of tackle to build all the stuff

So I think it's just about getting a few

of those key ones, you know

It'd be great if we can get push

notifications in our purchases

The camera and a few other bits and

pieces going and then I mean Android is

that the other big piece, right?

So we get Android and those things and

get everything kind of on par with each

other and then it kind of feels ready

Yeah, because right

now it it's stable enough

you know, I there is an

app on the App Store that

so the the principle of that is you could

go today and and use it and build a

product that you can sell like you could

Sell it on the store or you could build

it for a client that's

paying you and you you know

You're basically making money off this

thing straight away, which is great

So I feel that it's like stable enough

right now to do something

But yeah, it's not gonna do all of the

things that you might want to do with

like interacting with the device

API's so I

Think once we've got some of those the

stability is kind of already there

Android will come and that'll just be

like the okay, you know

We've got the little cherry on top now

with everything working together. So

let's just roll this out proper and then

Then we can continue just like supporting

it and maintaining it and improving it

so I think

We're probably looking at

a couple of months from now

But I definitely want to bring that in as

much as I possibly can so get it get it

going as quickly as possible

basically

Awesome. Well if so when

people want to find out more

Where should they go? You know, I guess

like a newsletter sign up or

anything like that for them

Yeah, the the easiest place to go to is

native PHP comm slash iOS

Because it is iOS at only at the moment

But yeah, the the docs are coming

together on native PHP comm got now like

the whole section of

like switching between

desktop and mobile

Documentation so you can start to see all

of that come together

And if you go to that page that I just

mentioned, there's the chance to join the

early access program

And there's a sign-up link

there as well for a newsletter

If you know you're not ready to join the

early access program

so you can find out more

I'll be sharing updates and stuff on the

newsletter over the

coming weeks like probably

once a week for the next few weeks

Awesome. Well, man. Well, I appreciate

you taking the time to you know, let us

talk about native PHP iOS

And I'm really glad to have the

opportunity again. Yeah, I'm excited

I'm excited to see where this this you

know brings the community in the future

like we're it feels like

there Connie you with all the

announcements around

Laravel proper announcements then you

have you know what you're doing yet

fusion you have and

all this stuff is just

Coming out of nowhere in the last year

and it's it's pretty inspiring and I

think we'll do a lot with people with

Laravel in the future

Yeah, I can't wait to use fusion. I think

Aaron said he's gonna

bring it out on Friday

I think he was gonna do it on Monday

originally, but now it's

gonna be this this Friday

and I just I want to

get my hands on that and

chuck it into native PHP and

see if it work on mobile out of the box

because I think that's gonna be really

cool because I think view

You know, I've been showing most of my

demos from like live wire because I

really like using live wire

but I used to do a lot of view and I know

there's like a space for

still doing that and I think

allowing people to use

whatever front-end tooling

Really makes sense and and there's

nothing to stop you like I

can't tell you you can't do it

So, you know

you can use view or react to whatever and

and I think fusion will just slot right

in there and just work and I just

want to try it out so that I can see if

that happens and I think that's gonna be

very cool for a lot of people because

Yeah, Aaron did an awesome job. His talk

was brilliant and the the

project looks great, too

So I'm really excited to see that

For sure for sure

all right, well Simon, thank you again

for coming and joining me and

We'll look look forward to the launch and

to everything you're

working on. Thanks, man

Creators and Guests

NativePHP for iOS with Simon Hamp
Broadcast by