Rename the native apps from Meet to Calls
Swift targets, sources, tests and the generated Xcode project all move: MeetNative/MeetKit/MeetMac/MeetInterop/MeetBridge/MeetPhone become their Calls equivalents, and the bundle identifiers follow (net.amadan.oficina.calls, net.amadan.oficina.calls.ios). The rename pattern is Meeting-safe. Meeting, MeetingInfo, MeetingShareButton and MeetingInvitationView are the domain noun, not the product, and are untouched. Two other deliberate exceptions: "Meet face to face." in CallsLobby stays. That is the English verb, and it still reads correctly in an app called Calls. The relay username-suffix fixtures keep abc:meet:..., since that string is opaque data issued through CARLOS_RELAY rather than app identity. Server-rendered copy moves with the clients, which matters because the iPhone UI test asserts on a label the server produces: the approval button is now "Sign in to Calls app" on both sides. The dev-only X-Meet-Test-TTL and X-Meet-Test-Ice-TTL headers become X-Calls-Test-*. CallsBridge.xcframework was rebuilt from ./bridge through gomobile rather than renamed, so the framework's own embedded module name is right. swift build, swift test, go build, go vet and the Go suite all pass. TestCreditsMatchProductionDependencies still fails for the same reason it fails on main: it reads $GOROOT/LICENSE, absent from this Go install.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
81 files changed,
+899
−174
callscore/auth.go+2 −2callscore/room.go+1 −1callscore/transport.go+11 −11design/oficina-icons/png/{meet-1024.png => calls-1024.png}binarydesign/oficina-icons/png/{meet-16.png => calls-16.png}binarydesign/oficina-icons/png/{meet-180.png => calls-180.png}binarydesign/oficina-icons/png/{meet-192.png => calls-192.png}binarydesign/oficina-icons/png/{meet-32.png => calls-32.png}binarydesign/oficina-icons/png/{meet-48.png => calls-48.png}binarydesign/oficina-icons/png/{meet-512.png => calls-512.png}binarydesign/oficina-icons/svg/{meet.svg => calls.svg}+0 −0internal/calls/app.go+2 −2internal/calls/auth.go+5 −5internal/calls/ice.go+1 −1internal/calls/mailredact.go+1 −1internal/calls/migrations.go+1 −1internal/calls/native_auth.go+2 −2internal/calls/native_auth_test.go+1 −1internal/calls/relay/relay_test.go+1 −1internal/calls/render.go+1 −1internal/calls/seal/seal.go+1 −1internal/calls/static/brand/icon.svg+1 −1internal/calls/static/chat.css+1 −1internal/calls/static/chat.js+1 −1internal/calls/static/devices.js+2 −2internal/calls/static/room.js+4 −4internal/calls/stream.go+1 −1internal/calls/stream_test.go+1 −1internal/calls/templates/credits.html+1 −1internal/calls/templates/home.html+1 −1internal/calls/templates/join.html+1 −1internal/calls/templates/layout.html+3 −3internal/calls/templates/native.html+4 −4internal/calls/templates/partials/chat.html+1 −1internal/calls/templates/room.html+1 −1internal/calls/templates/signin.html+1 −1internal/calls/templates/welcome.html+1 −1internal/callstest/harness_test.go+3 −3internal/callstest/ice_test.go+2 −2internal/callstest/meetings_test.go+1 −1internal/callstest/room_test.go+1 −1native/apple/Package.swift+9 −9native/apple/Sources/{MeetInterop => CallsInterop}/Interop.swift+3 −3native/apple/Sources/{MeetInterop => CallsInterop}/LobbySnapshots.swift+3 −3native/apple/Sources/{MeetInterop => CallsInterop}/SyntheticVideo.swift+1 −1native/apple/Sources/{MeetKit => CallsKit}/Call.swift+4 −4native/apple/Sources/{MeetKit => CallsKit}/CallActionStyle.swift+1 −1native/apple/Sources/{MeetKit => CallsKit}/CallControl.swift+0 −0native/apple/Sources/{MeetKit/MeetAppearance.swift => CallsKit/CallsAppearance.swift}+2 −2native/apple/Sources/{MeetKit/MeetLobby.swift => CallsKit/CallsLobby.swift}+7 −7native/apple/Sources/{MeetKit/MeetModel.swift => CallsKit/CallsModel.swift}+4 −4native/apple/Sources/{MeetKit => CallsKit}/Capture.swift+2 −2native/apple/Sources/{MeetKit => CallsKit}/ChatDraft.swift+0 −0native/apple/Sources/{MeetKit => CallsKit}/ChatView.swift+0 −0native/apple/Sources/{MeetKit => CallsKit}/MacCallView.swift+2 −2native/apple/Sources/{MeetKit => CallsKit}/MacChatWindow.swift+1 −1native/apple/Sources/{MeetKit => CallsKit}/MacVideoTile.swift+0 −0native/apple/Sources/{MeetKit => CallsKit}/Media.swift+0 −0native/apple/Sources/{MeetKit => CallsKit}/MeetingShareButton.swift+0 −0native/apple/Sources/{MeetKit => CallsKit}/Wire.swift+0 −0native/apple/Sources/{MeetMac/MeetMac.swift => CallsMac/CallsMac.swift}+10 −10native/apple/Sources/{MeetMac => CallsMac}/Resources/AppIcon.pngbinarynative/apple/Sources/{MeetMac => CallsMac}/Resources/MacIcon.pngbinarynative/apple/Tests/{MeetKitTests => CallsKitTests}/ChatWindowTests.swift+4 −4native/bridge/bridge.go+5 −5native/ios/CallsPhone.xcodeproj/project.pbxproj+605 −0native/ios/CallsPhone.xcodeproj/project.xcworkspace/contents.xcworkspacedata+7 −0native/ios/CallsPhone.xcodeproj/xcshareddata/xcschemes/CallsPhone.xcscheme+113 −0native/ios/README.md+7 −7native/ios/Sources/{MeetPhone.swift => CallsPhone.swift}+8 −8native/ios/Tests/{MeetPhoneTests.swift => CallsPhoneTests.swift}+2 −2native/ios/UITests/{MeetPhoneUITests.swift => CallsPhoneUITests.swift}+2 −2native/ios/project.yml+20 −20native/scripts/build-bridge.sh+1 −1native/scripts/build-iphone.sh+2 −2native/scripts/build-mac.sh+2 −2native/scripts/bundle-mac.py+1 −1native/scripts/generate-mac-icon.swift+3 −3protocol/messages.go+1 −1test/browser/call.mjs+3 −3test/browser/native-auth.mjs+2 −2
diff --git a/callscore/auth.go b/callscore/auth.go| index dc5746a..15e4847 100644 |
| --- a/callscore/auth.go |
| +++ b/callscore/auth.go |
| @@ -70,7 +70,7 @@ func BeginAuthentication(ctx context.Context, address string) (*Authentication, |
| defer res.Body.Close() |
| if res.StatusCode != 200 { |
| cancel() |
| - return nil, errors.New("this Meet server does not support native sign-in yet, or is temporarily unavailable") |
| + return nil, errors.New("this Calls server does not support native sign-in yet, or is temporarily unavailable") |
| } |
| var out struct { |
| ID string `json:"id"` |
| @@ -97,7 +97,7 @@ func (a *Authentication) post(path string, input any) (*http.Response, error) { |
| res, e := a.client.Do(req) |
| if e != nil { |
| cancel() |
| - return nil, errors.New("cannot reach Meet; try signing in again") |
| + return nil, errors.New("cannot reach Calls; try signing in again") |
| } |
| res.Body = &authBody{ReadCloser: res.Body, cancel: cancel} |
| return res, nil |
diff --git a/callscore/room.go b/callscore/room.go| index 390b734..01d240d 100644 |
| --- a/callscore/room.go |
| +++ b/callscore/room.go |
| @@ -402,7 +402,7 @@ func (r *Room) Send(typ, to string, expectedGen uint64, payload string) error { |
| } |
| b, err := json.Marshal(s) |
| if err != nil || len(b) > 64*1024 { |
| - return errors.New("signal exceeds Meet's message limit") |
| + return errors.New("signal exceeds Calls' message limit") |
| } |
| laneKey := target |
| if typ == protocol.TypeReset { |
diff --git a/callscore/transport.go b/callscore/transport.go| index a5a20af..f7f830a 100644 |
| --- a/callscore/transport.go |
| +++ b/callscore/transport.go |
| @@ -1,4 +1,4 @@ |
| -// Package callscore is the shared, UI-free Go client for Meet. It owns signaling |
| +// Package callscore is the shared, UI-free Go client for Calls. It owns signaling |
| // and room state plus browser sign-in handoff; the host owns browser launch, |
| // credential storage and media. |
| package callscore |
| @@ -31,7 +31,7 @@ type HTTPError struct { |
| RetryAfter time.Duration |
| } |
| -func (e *HTTPError) Error() string { return fmt.Sprintf("Meet request refused (%d)", e.Status) } |
| +func (e *HTTPError) Error() string { return fmt.Sprintf("Calls request refused (%d)", e.Status) } |
| type transport struct { |
| origin string |
| @@ -42,10 +42,10 @@ type transport struct { |
| func newTransport(origin, room string, client *http.Client) (*transport, error) { |
| u, err := url.Parse(origin) |
| if err != nil || u.Host == "" || u.User != nil || u.RawQuery != "" || u.Fragment != "" || (u.Path != "" && u.Path != "/") { |
| - return nil, errors.New("enter a Meet server origin") |
| + return nil, errors.New("enter a Calls server origin") |
| } |
| if u.Scheme != "https" && !(u.Scheme == "http" && (u.Hostname() == "127.0.0.1" || u.Hostname() == "localhost" || u.Hostname() == "::1")) { |
| - return nil, errors.New("Meet requires HTTPS (HTTP is allowed only on loopback)") |
| + return nil, errors.New("Calls requires HTTPS (HTTP is allowed only on loopback)") |
| } |
| if room == "" || len(room) > 32 || strings.IndexFunc(room, func(r rune) bool { return !(r >= 'a' && r <= 'z' || r >= 'A' && r <= 'Z' || r >= '0' && r <= '9') }) >= 0 { |
| return nil, errors.New("invalid meeting identifier") |
| @@ -73,7 +73,7 @@ func (t *transport) request(ctx context.Context, method, endpoint string, q url. |
| } |
| req, err := http.NewRequestWithContext(ctx, method, path, bytes.NewReader(body)) |
| if err != nil { |
| - return nil, errors.New("cannot build Meet request") |
| + return nil, errors.New("cannot build Calls request") |
| } |
| req.Header.Set("Accept", "application/json") |
| if endpoint == "stream" { |
| @@ -85,7 +85,7 @@ func (t *transport) request(ctx context.Context, method, endpoint string, q url. |
| } |
| res, err := t.http.Do(req) |
| if err != nil { |
| - return nil, errors.New("cannot reach Meet") |
| + return nil, errors.New("cannot reach Calls") |
| } |
| if res.StatusCode >= 200 && res.StatusCode < 300 { |
| return res, nil |
| @@ -111,7 +111,7 @@ func (t *transport) request(ctx context.Context, method, endpoint string, q url. |
| func (t *transport) post(ctx context.Context, s protocol.Signal) error { |
| b, err := json.Marshal(s) |
| if err != nil || len(b) > 64*1024 { |
| - return errors.New("signal exceeds Meet's message limit") |
| + return errors.New("signal exceeds Calls' message limit") |
| } |
| ctx, cancel := context.WithTimeout(ctx, 10*time.Second) |
| defer cancel() |
| @@ -137,7 +137,7 @@ func readEvents(r io.Reader, receive func(protocol.Message) error) error { |
| if len(data) > 0 { |
| var m protocol.Message |
| if err := json.Unmarshal([]byte(strings.Join(data, "\n")), &m); err != nil { |
| - return errors.New("invalid Meet event") |
| + return errors.New("invalid Calls event") |
| } |
| if err := receive(m); err != nil { |
| return err |
| @@ -151,13 +151,13 @@ func readEvents(r io.Reader, receive func(protocol.Message) error) error { |
| value := strings.TrimPrefix(strings.TrimPrefix(line, "data:"), " ") |
| size += len(value) + 1 |
| if size > maxResponse { |
| - return errors.New("Meet event exceeds limit") |
| + return errors.New("Calls event exceeds limit") |
| } |
| data = append(data, value) |
| } |
| } |
| if err := scanner.Err(); err != nil { |
| - return errors.New("Meet event stream interrupted") |
| + return errors.New("Calls event stream interrupted") |
| } |
| return io.EOF |
| } |
| @@ -185,7 +185,7 @@ func (t *transport) ice(ctx context.Context, peer protocol.PeerID) (ICEServers, |
| defer res.Body.Close() |
| var ice ICEServers |
| if err := json.NewDecoder(io.LimitReader(res.Body, maxResponse)).Decode(&ice); err != nil { |
| - return ice, errors.New("invalid Meet ICE response") |
| + return ice, errors.New("invalid Calls ICE response") |
| } |
| return ice, nil |
| } |
diff --git a/design/oficina-icons/png/meet-1024.png b/design/oficina-icons/png/calls-1024.png| similarity index 100% |
| rename from design/oficina-icons/png/meet-1024.png |
| rename to design/oficina-icons/png/calls-1024.png |
diff --git a/design/oficina-icons/png/meet-16.png b/design/oficina-icons/png/calls-16.png| similarity index 100% |
| rename from design/oficina-icons/png/meet-16.png |
| rename to design/oficina-icons/png/calls-16.png |
diff --git a/design/oficina-icons/png/meet-180.png b/design/oficina-icons/png/calls-180.png| similarity index 100% |
| rename from design/oficina-icons/png/meet-180.png |
| rename to design/oficina-icons/png/calls-180.png |
diff --git a/design/oficina-icons/png/meet-192.png b/design/oficina-icons/png/calls-192.png| similarity index 100% |
| rename from design/oficina-icons/png/meet-192.png |
| rename to design/oficina-icons/png/calls-192.png |
diff --git a/design/oficina-icons/png/meet-32.png b/design/oficina-icons/png/calls-32.png| similarity index 100% |
| rename from design/oficina-icons/png/meet-32.png |
| rename to design/oficina-icons/png/calls-32.png |
diff --git a/design/oficina-icons/png/meet-48.png b/design/oficina-icons/png/calls-48.png| similarity index 100% |
| rename from design/oficina-icons/png/meet-48.png |
| rename to design/oficina-icons/png/calls-48.png |
diff --git a/design/oficina-icons/png/meet-512.png b/design/oficina-icons/png/calls-512.png| similarity index 100% |
| rename from design/oficina-icons/png/meet-512.png |
| rename to design/oficina-icons/png/calls-512.png |
diff --git a/design/oficina-icons/svg/meet.svg b/design/oficina-icons/svg/calls.svg| similarity index 100% |
| rename from design/oficina-icons/svg/meet.svg |
| rename to design/oficina-icons/svg/calls.svg |
diff --git a/internal/calls/app.go b/internal/calls/app.go| index ae20c98..f3a331a 100644 |
| --- a/internal/calls/app.go |
| +++ b/internal/calls/app.go |
| @@ -195,7 +195,7 @@ func (w gormWriter) Printf(format string, args ...any) { |
| // is about not keeping records past their life, not about safety. |
| const sweepEvery = time.Hour |
| -// sweepOnce clears Meet's expired pending rows and rastrillo's expired |
| +// sweepOnce clears Calls' expired pending rows and rastrillo's expired |
| // auth links and sessions (review C1-7), one bounded call to |
| // store.sweep — not looped, so a caller with a deadline (the boot sweep, |
| // SweepForTest) gets one page of work done and returns. An unclicked |
| @@ -204,7 +204,7 @@ const sweepEvery = time.Hour |
| // was calling Sweep. |
| // |
| // now drives both halves: one clock for the whole pass (Internal 5), so |
| -// a test that advances Meet's clock expires rastrillo's auth_links rows |
| +// a test that advances Calls' clock expires rastrillo's auth_links rows |
| // too. In production the caller passes the store's own clock, so it is |
| // simply time.Now. |
| func (a *app) sweepOnce(ctx context.Context, now time.Time) { |
diff --git a/internal/calls/auth.go b/internal/calls/auth.go| index 55aca7c..89b2956 100644 |
| --- a/internal/calls/auth.go |
| +++ b/internal/calls/auth.go |
| @@ -15,7 +15,7 @@ import ( |
| const signinPath = "/signin" |
| const sentLocation = signinPath + "?sent=1" |
| -// newAuthPlugin wires rastrillo/auth. Authorize is Meet's one departure |
| +// newAuthPlugin wires rastrillo/auth. Authorize is Calls' one departure |
| // from Docs (spec §3.2): an address is admitted at the emailed link when |
| // it is on the allowlist, or when it holds an unexpired pending-join row |
| // whose link is still live. The row was written before the mail went |
| @@ -49,9 +49,9 @@ func (a *app) authorize(address string) bool { |
| return live |
| } |
| -// gateBegin sits in front of rastrillo's Begin. Meet's own refusals are |
| +// gateBegin sits in front of rastrillo's Begin. Calls' own refusals are |
| // byte-identical to success; rastrillo's address and rate outcomes are |
| -// shown; membership of a specific address is not a secret Meet keeps at |
| +// shown; membership of a specific address is not a secret Calls keeps at |
| // this form, per spec §3.2, and the timing of a sent mail is a further |
| // channel the response cannot hide. Task 6 adds the pending-join |
| // exception in front of the allowlist check. |
| @@ -123,9 +123,9 @@ func (a *app) mayRequestLink(w http.ResponseWriter, r *http.Request, address str |
| // sameAnswer rewrites rastrillo's own refusal redirects to the sent |
| // location. It hooks WriteHeader because http.Redirect sets Location |
| // and then calls WriteHeader, so the Location is visible in time. |
| -// Meet's own refusals are byte-identical to success; rastrillo's |
| +// Calls' own refusals are byte-identical to success; rastrillo's |
| // address and rate outcomes are shown; membership of a specific |
| -// address is not a secret Meet keeps at this form, per spec §3.2, and |
| +// address is not a secret Calls keeps at this form, per spec §3.2, and |
| // the timing of a sent mail is a further channel the response cannot |
| // hide. |
| type sameAnswer struct { |
diff --git a/internal/calls/ice.go b/internal/calls/ice.go| index 75f5fc5..699e806 100644 |
| --- a/internal/calls/ice.go |
| +++ b/internal/calls/ice.go |
| @@ -24,7 +24,7 @@ const ( |
| // (like stream.go's testTTLHeader): a plain GET can set it, unlike |
| // EventSource, so this one needs no browser gate to reach — the |
| // development gate is what keeps it off production. |
| - testIceHeader = "X-Meet-Test-Ice-TTL" |
| + testIceHeader = "X-Calls-Test-Ice-TTL" |
| minIceLife = 2 * time.Second |
| ) |
diff --git a/internal/calls/mailredact.go b/internal/calls/mailredact.go| index a16fd71..45c90d3 100644 |
| --- a/internal/calls/mailredact.go |
| +++ b/internal/calls/mailredact.go |
| @@ -18,7 +18,7 @@ import ( |
| // (mail/mail.go:163) and rastrillo/auth logs that error verbatim |
| // (auth/handlers.go:51). An outsider who asks for a magic link during an |
| // SMTP outage would therefore leave their plaintext address in the log, |
| -// before they have signed in and before Meet has decided to admit them — |
| +// before they have signed in and before Calls has decided to admit them — |
| // which spec §0.1's falsifiable claim covers as squarely as the database |
| // does. So the wrapper logs the failure itself and hands rastrillo an |
| // error that says only that delivery failed. |
diff --git a/internal/calls/migrations.go b/internal/calls/migrations.go| index 1956f90..502f68b 100644 |
| --- a/internal/calls/migrations.go |
| +++ b/internal/calls/migrations.go |
| @@ -32,5 +32,5 @@ var Schema = migrate.MustFromFS(migrationFS, "meet") |
| // misread a subsystem's tables as ones Models forgot. |
| // |
| // Apply order: sessions before auth (auth's second migration reads the |
| -// sessions table), Meet's own last. |
| +// sessions table), Calls' own last. |
| var BootSchema = migrate.Merge(sessions.Schema, rauth.Schema, Schema) |
diff --git a/internal/calls/native_auth.go b/internal/calls/native_auth.go| index 25b205e..1e2adae 100644 |
| --- a/internal/calls/native_auth.go |
| +++ b/internal/calls/native_auth.go |
| @@ -213,7 +213,7 @@ func (a *app) nativeAuthorize(w http.ResponseWriter, r *http.Request) { |
| http.NotFound(w, r) |
| return |
| } |
| - render(w, "native", a.page(r, map[string]any{"Title": "Sign in to the Meet app", "Action": "/native/authorize?id=" + id, "Done": false, "Code": protocol.AuthenticationCode(id)})) |
| + render(w, "native", a.page(r, map[string]any{"Title": "Sign in to the Calls app", "Action": "/native/authorize?id=" + id, "Done": false, "Code": protocol.AuthenticationCode(id)})) |
| } |
| func (a *app) nativeApprove(w http.ResponseWriter, r *http.Request) { |
| nativeHeaders(w) |
| @@ -237,5 +237,5 @@ func (a *app) nativeApprove(w http.ResponseWriter, r *http.Request) { |
| func (a *app) nativeComplete(w http.ResponseWriter, r *http.Request) { |
| nativeHeaders(w) |
| - render(w, "native", a.page(r, map[string]any{"Title": "Meet is signed in", "Done": true})) |
| + render(w, "native", a.page(r, map[string]any{"Title": "Calls is signed in", "Done": true})) |
| } |
diff --git a/internal/calls/native_auth_test.go b/internal/calls/native_auth_test.go| index 03aa42b..9f24f0c 100644 |
| --- a/internal/calls/native_auth_test.go |
| +++ b/internal/calls/native_auth_test.go |
| @@ -42,7 +42,7 @@ func TestNativeHandoffPreservesHomeIdentityAndRequiresProof(t *testing.T) { |
| if w := exchange(v); w.Code != 202 { |
| t.Fatal("not pending", w.Code) |
| } |
| - if w := f.do("GET", "/native/authorize?id="+id, ""); w.Code != 200 || !strings.Contains(w.Body.String(), "Sign in to Meet app") { |
| + if w := f.do("GET", "/native/authorize?id="+id, ""); w.Code != 200 || !strings.Contains(w.Body.String(), "Sign in to Calls app") { |
| t.Fatal("missing consent", w.Code) |
| } |
| if w := exchange(v); w.Code != 202 { |
diff --git a/internal/calls/relay/relay_test.go b/internal/calls/relay/relay_test.go| index d62e28a..a3c375b 100644 |
| --- a/internal/calls/relay/relay_test.go |
| +++ b/internal/calls/relay/relay_test.go |
| @@ -135,7 +135,7 @@ func TestParseRefusesWithoutEchoingTheValue(t *testing.T) { |
| nil, |
| }, |
| "suffix bad app": { |
| - encode(t, []map[string]any{{"region": "eu-west-1", "urls": []string{"stun:a:1"}, "key": vectorKey, "username_suffix": "abc:Meet!:0123456789abcdef:k1"}}), |
| + encode(t, []map[string]any{{"region": "eu-west-1", "urls": []string{"stun:a:1"}, "key": vectorKey, "username_suffix": "abc:Calls!:0123456789abcdef:k1"}}), |
| nil, |
| }, |
| "suffix bad incarnation": { |
diff --git a/internal/calls/render.go b/internal/calls/render.go| index 7b6c909..9039de6 100644 |
| --- a/internal/calls/render.go |
| +++ b/internal/calls/render.go |
| @@ -60,7 +60,7 @@ func init() { |
| // buildPage parses rastrillo's ui partials first, then this app's own |
| // partials, then the layout and the page, so a page can call |
| // confirm-form, field, empty-state and the rest by name with a dict — |
| -// and chat-panel, the one partial Meet owns, the same way. |
| +// and chat-panel, the one partial Calls owns, the same way. |
| // |
| // templates/partials/ is parsed for every page rather than per page |
| // that uses it: a partial is defined-but-unused for free, and the |
diff --git a/internal/calls/seal/seal.go b/internal/calls/seal/seal.go| index f966f49..afac988 100644 |
| --- a/internal/calls/seal/seal.go |
| +++ b/internal/calls/seal/seal.go |
| @@ -7,7 +7,7 @@ |
| // |
| // Lifted from calendar's seal package, itself lifted from sheets', with |
| // only the label changed. Calendar names the third app as the trigger |
| -// to extract this into estilo or rastrillo; Meet is that app, and the |
| +// to extract this into estilo or rastrillo; Calls is that app, and the |
| // extraction is a task on the plan, not a change here. |
| package seal |
diff --git a/internal/calls/static/brand/icon.svg b/internal/calls/static/brand/icon.svg| index a027150..a98731d 100644 |
| --- a/internal/calls/static/brand/icon.svg |
| +++ b/internal/calls/static/brand/icon.svg |
| @@ -1,2 +1,2 @@ |
| -<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024" role="img" aria-label="Meet"><title>Meet</title><rect x="0" y="0" width="1024" height="1024" rx="0" fill="#087F8C"/><g transform="translate(153.6 153.6) scale(29.866666666666664)" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5" /> |
| +<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024" role="img" aria-label="Calls"><title>Calls</title><rect x="0" y="0" width="1024" height="1024" rx="0" fill="#087F8C"/><g transform="translate(153.6 153.6) scale(29.866666666666664)" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5" /> |
| <rect x="2" y="6" width="14" height="12" rx="2" /></g></svg> |
diff --git a/internal/calls/static/chat.css b/internal/calls/static/chat.css| index e0969e7..f9a42f5 100644 |
| --- a/internal/calls/static/chat.css |
| +++ b/internal/calls/static/chat.css |
| @@ -1,6 +1,6 @@ |
| /* chat.css: the panel half of the suite's first chat (spec §6, §10). |
| Companion to templates/partials/chat.html and static/chat.js, and |
| - like both of them it names nothing about Meet: every value here is an |
| + like both of them it names nothing about Calls: every value here is an |
| --rst-* token the theme already defines, so a second app that adopts |
| these three files gets its own theme's colours, spacing and radii |
| without touching a line. |
diff --git a/internal/calls/static/chat.js b/internal/calls/static/chat.js| index 47c4e42..f206f61 100644 |
| --- a/internal/calls/static/chat.js |
| +++ b/internal/calls/static/chat.js |
| @@ -1,7 +1,7 @@ |
| // chat.js: the panel half of the suite's first chat (spec §6, §10). |
| // |
| // One file, no library, no framework, and — deliberately — no knowledge |
| -// of Meet. It does not read a sqid, does not touch #room, does not know |
| +// of Calls. It does not read a sqid, does not touch #room, does not know |
| // room.js exists, and never talks to a server: the host hands it a |
| // `send` function and feeds it arriving messages. A second app adopts |
| // this file, templates/partials/chat.html and static/chat.css unchanged |
diff --git a/internal/calls/static/devices.js b/internal/calls/static/devices.js| index 6f7868b..79fc997 100644 |
| --- a/internal/calls/static/devices.js |
| +++ b/internal/calls/static/devices.js |
| @@ -301,12 +301,12 @@ |
| function errorSentence(err) { |
| if (err.name === 'NotAllowedError') { |
| - return 'Meet needs permission to use your camera and microphone. You can still join with neither.'; |
| + return 'Calls needs permission to use your camera and microphone. You can still join with neither.'; |
| } |
| if (err.name === 'NotReadableError') { |
| return 'Your camera or microphone is already in use by another app. You can still join with neither.'; |
| } |
| - return 'Meet could not reach a camera or microphone. You can still join with neither.'; |
| + return 'Calls could not reach a camera or microphone. You can still join with neither.'; |
| } |
| // --- pickers: (re)built from enumerateDevices, which only carries --- |
diff --git a/internal/calls/static/room.js b/internal/calls/static/room.js| index 18cbd11..ba339f1 100644 |
| --- a/internal/calls/static/room.js |
| +++ b/internal/calls/static/room.js |
| @@ -115,7 +115,7 @@ |
| const HEALTHY_STREAM = 5000; |
| // §5.3: a fetch of /ice that fails is retried every minute, and the |
| // warning stands from the first failure until one succeeds. The gate |
| - // shortens the *schedule* through X-Meet-Test-Ice-TTL's effect on |
| + // shortens the *schedule* through X-Calls-Test-Ice-TTL's effect on |
| // `renewAt`, never this: there is no client knob for it. |
| const ICE_RETRY = 60000; |
| // §5.3 step 2: each ICE restart gets thirty seconds to prove itself, |
| @@ -739,7 +739,7 @@ |
| function deviceError(kind, err) { |
| const thing = kind === 'audio' ? 'microphone' : 'camera'; |
| if (err && err.name === 'NotAllowedError') { |
| - return 'Meet needs permission to use that ' + thing + '. The call is still on the previous one.'; |
| + return 'Calls needs permission to use that ' + thing + '. The call is still on the previous one.'; |
| } |
| if (err && err.name === 'NotReadableError') { |
| return 'That ' + thing + ' is in use by another app. The call is still on the previous one.'; |
| @@ -2071,7 +2071,7 @@ |
| // servers is logged: the list carries a credential, and the three |
| // diagnostics below print an error object and never a response. |
| - const ICE_WARNING = 'Meet could not reach the relay. Calls may not connect until it can.'; |
| + const ICE_WARNING = 'Calls could not reach the relay. Calls may not connect until it can.'; |
| const ICE_EXPIRED = 'The relay credential expired for this connection.'; |
| const ICE_STUCK = 'Could not renew this connection through the relay.'; |
| const FAILED_RELAY = 'Could not connect, even through the relay.'; |
| @@ -3888,7 +3888,7 @@ |
| gone: 'You cannot join this meeting.', |
| signedout: 'You have been signed out.', |
| accept: 'This browser could not open the call\u2019s connection.', |
| - unreachable: 'Meet cannot reach the call. The room may be full, or you may have been signed out.', |
| + unreachable: 'Calls cannot reach the call. The room may be full, or you may have been signed out.', |
| nowebrtc: 'This browser cannot make calls.', |
| }; |
diff --git a/internal/calls/stream.go b/internal/calls/stream.go| index 12d3211..645c5d0 100644 |
| --- a/internal/calls/stream.go |
| +++ b/internal/calls/stream.go |
| @@ -83,7 +83,7 @@ func acceptsEventStream(r *http.Request) bool { |
| // the only way to watch a renewal without waiting five minutes. Outside |
| // development the header is not read at all: a request may not shorten |
| // a stream on its own say-so. |
| -const testTTLHeader = "X-Meet-Test-TTL" |
| +const testTTLHeader = "X-Calls-Test-TTL" |
| // streamLifeFor is streamLife with that override applied, through the |
| // same floor atLeast puts under every timing — a header cannot panic a |
diff --git a/internal/calls/stream_test.go b/internal/calls/stream_test.go| index 0d0f18a..938e483 100644 |
| --- a/internal/calls/stream_test.go |
| +++ b/internal/calls/stream_test.go |
| @@ -8,7 +8,7 @@ import ( |
| ) |
| // TestTheTestTTLHeaderIsDevelopmentOnly pins the one thing that makes |
| -// X-Meet-Test-TTL safe to have at all: outside development it is not |
| +// X-Calls-Test-TTL safe to have at all: outside development it is not |
| // read, so a request cannot shorten its own stream and no amount of |
| // header-setting turns a five-minute stream into a reconnect storm. |
| func TestTheTestTTLHeaderIsDevelopmentOnly(t *testing.T) { |
diff --git a/internal/calls/templates/credits.html b/internal/calls/templates/credits.html| index 840375c..6859fa3 100644 |
| --- a/internal/calls/templates/credits.html |
| +++ b/internal/calls/templates/credits.html |
| @@ -1,3 +1,3 @@ |
| -{{define "title"}}Open source · Meet{{end}} |
| +{{define "title"}}Open source · Calls{{end}} |
| {{define "head"}}<link rel="stylesheet" href="/static/credits.css">{{end}} |
| {{define "content"}}{{template "estilo/credits" .Data}}{{end}} |
diff --git a/internal/calls/templates/home.html b/internal/calls/templates/home.html| index 4dafa74..3acfe36 100644 |
| --- a/internal/calls/templates/home.html |
| +++ b/internal/calls/templates/home.html |
| @@ -1,2 +1,2 @@ |
| -{{define "title"}}{{.Home.Title}} · Meet{{end}} |
| +{{define "title"}}{{.Home.Title}} · Calls{{end}} |
| {{define "content"}}{{template "home-connect" .Home}}{{end}} |
diff --git a/internal/calls/templates/join.html b/internal/calls/templates/join.html| index 921cae2..a4f8ee2 100644 |
| --- a/internal/calls/templates/join.html |
| +++ b/internal/calls/templates/join.html |
| @@ -7,7 +7,7 @@ |
| <div class="calls-lobby-heading">{{template "page-header" dict "Title" .Title}}</div> |
| {{if .Starts}}<p>Starts {{.Starts}}.</p>{{end}} |
| <p>You are {{.Name}}, joining as a {{.Standing}}.</p> |
| -{{if .Floor}}<p rst-notice>This team's Meet has no relay yet. Calls usually connect only between people on the same network.</p>{{end}} |
| +{{if .Floor}}<p rst-notice>This team's Calls has no relay yet. Calls usually connect only between people on the same network.</p>{{end}} |
| {{if .IsMember}}<form method="post" action="/m/{{.Sqid}}/share" target="_blank" rel="noopener" data-busy="false" estilo-call-actions><button type="submit" rst-btn aria-label="Share meeting link">Share link</button></form>{{end}} |
| {{if .OpenElsewhere}}<p rst-notice>This meeting is already open in another tab. <a href="/m/{{.Sqid}}/takeover">Use this tab instead</a>.</p>{{end}} |
| <noscript><p>The call needs JavaScript to reach your camera and the other participants; everything else on this page works without it.</p></noscript> |
diff --git a/internal/calls/templates/layout.html b/internal/calls/templates/layout.html| index d41fa73..7c6e75f 100644 |
| --- a/internal/calls/templates/layout.html |
| +++ b/internal/calls/templates/layout.html |
| @@ -7,7 +7,7 @@ |
| <link rel="stylesheet" href="{{asset "static/brand/brand.css"}}"> |
| <meta charset="utf-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1"> |
| -<title>{{block "title" .}}Meet{{end}}</title> |
| +<title>{{block "title" .}}Calls{{end}}</title> |
| <link rel="stylesheet" href="{{asset "static/tokens.css"}}"> |
| <link rel="stylesheet" href="{{asset "static/theme.css"}}"> |
| <link rel="stylesheet" href="{{asset "static/callui.css"}}"> |
| @@ -21,9 +21,9 @@ |
| <div rst-shell-topbar> |
| <a rst-skip href="#main">{{T "rastrillo.ui.shell_skip"}}</a> |
| <header rst-shell-bar> |
| -<a rst-shell-brand estilo-brand href="/"><img estilo-brand-icon src="{{asset "static/brand/icon.svg"}}" alt="" width="28" height="28">Meet</a> |
| +<a rst-shell-brand estilo-brand href="/"><img estilo-brand-icon src="{{asset "static/brand/icon.svg"}}" alt="" width="28" height="28">Calls</a> |
| {{/* The account corner is the only thing this shell's tail ever |
| - carries — Meet has no nav and no locale menu yet — so the whole |
| + carries — Calls has no nav and no locale menu yet — so the whole |
| menu+tail pair is skipped outright for a signed-out request rather |
| than rendered empty behind a hamburger nobody needs. .Viewer is |
| set only by the page helper (render.go), and only when the request |
diff --git a/internal/calls/templates/native.html b/internal/calls/templates/native.html| index 018627e..f741e40 100644 |
| --- a/internal/calls/templates/native.html |
| +++ b/internal/calls/templates/native.html |
| @@ -3,11 +3,11 @@ |
| {{template "page-header" dict "Title" .Title}} |
| <div rst-box> |
| {{if .Done}} |
| -<p>Return to the Meet app to join your meeting. You can close this tab.</p> |
| +<p>Return to the Calls app to join your meeting. You can close this tab.</p> |
| {{else}} |
| -<p>Check that this code matches the one in your Meet app: <strong class="rst-mono">{{.Code}}</strong></p> |
| -<p>Continue only if you just started signing in from the Meet app on your own device. This gives that app access to Meet as the account shown above.</p> |
| -{{template "confirm-form" dict "Action" .Action "Label" "Sign in to Meet app" "CancelHref" "/" "CancelLabel" "Cancel"}} |
| +<p>Check that this code matches the one in your Calls app: <strong class="rst-mono">{{.Code}}</strong></p> |
| +<p>Continue only if you just started signing in from the Calls app on your own device. This gives that app access to Calls as the account shown above.</p> |
| +{{template "confirm-form" dict "Action" .Action "Label" "Sign in to Calls app" "CancelHref" "/" "CancelLabel" "Cancel"}} |
| {{end}} |
| </div> |
| {{end}} |
diff --git a/internal/calls/templates/partials/chat.html b/internal/calls/templates/partials/chat.html| index 018dcf9..485f100 100644 |
| --- a/internal/calls/templates/partials/chat.html |
| +++ b/internal/calls/templates/partials/chat.html |
| @@ -1,6 +1,6 @@ |
| {{/* chat-panel — the suite's first chat panel (spec §6, §10): one |
| self-contained partial whose only companions are static/chat.js and |
| - static/chat.css. It names nothing about Meet — no sqid, no room, no |
| + static/chat.css. It names nothing about Calls — no sqid, no room, no |
| room.js — so a second app adopts all three files unchanged: parse |
| this file, drop {{template "chat-panel" .}} where the panel belongs, |
| load the two assets, and call Chat.mount() with a send function. |
diff --git a/internal/calls/templates/room.html b/internal/calls/templates/room.html| index a4bf5ef..8956f83 100644 |
| --- a/internal/calls/templates/room.html |
| +++ b/internal/calls/templates/room.html |
| @@ -16,7 +16,7 @@ |
| </div> |
| {{if .Starts}}<p>Starts {{.Starts}}.</p>{{end}} |
| <p>You are {{.Name}}, joining as a {{.Standing}}.</p> |
| -{{if .Floor}}<p rst-notice>This team's Meet has no relay yet. Calls usually connect only between people on the same network.</p>{{end}} |
| +{{if .Floor}}<p rst-notice>This team's Calls has no relay yet. Calls usually connect only between people on the same network.</p>{{end}} |
| <noscript><p>The call needs JavaScript to reach your camera and the other participants; everything else on this page works without it. <a href="/m/{{.Sqid}}/join">Back to the holding screen</a>.</p></noscript> |
| <div id="room" data-sqid="{{.Sqid}}" data-boot="{{.Boot}}" data-self-name="{{.Name}}" data-is-member="{{if .IsMember}}1{{end}}" data-relay="{{if .Relay}}1{{end}}" data-peer="" hidden> |
diff --git a/internal/calls/templates/signin.html b/internal/calls/templates/signin.html| index e7aa866..11810ee 100644 |
| --- a/internal/calls/templates/signin.html |
| +++ b/internal/calls/templates/signin.html |
| @@ -1,7 +1,7 @@ |
| {{define "title"}}Sign in{{end}} |
| {{define "content"}} |
| <div class="calls-lobby"> |
| -{{template "page-header" dict "Title" "Sign in to Meet"}} |
| +{{template "page-header" dict "Title" "Sign in to Calls"}} |
| <div estilo-call-panel> |
| {{if .Sent}} |
| <p rst-notice>A sign in link should be on its way with a link to click.</p> |
diff --git a/internal/calls/templates/welcome.html b/internal/calls/templates/welcome.html| index 4455ff6..7679b9b 100644 |
| --- a/internal/calls/templates/welcome.html |
| +++ b/internal/calls/templates/welcome.html |
| @@ -1,5 +1,5 @@ |
| {{define "title"}}Signed in{{end}} |
| {{define "content"}} |
| {{template "page-header" dict "Title" "You're signed in"}} |
| -<p>You're signed in as {{.Email}}. This team's Meet has no meetings for you. If someone sent you a meeting link, open it again now.</p> |
| +<p>You're signed in as {{.Email}}. This team's Calls has no meetings for you. If someone sent you a meeting link, open it again now.</p> |
| {{end}} |
diff --git a/internal/callstest/harness_test.go b/internal/callstest/harness_test.go| index b2f46ef..22305b1 100644 |
| --- a/internal/callstest/harness_test.go |
| +++ b/internal/callstest/harness_test.go |
| @@ -133,7 +133,7 @@ func (x *harness) sweep() { x.ctl.SweepForTest(x.now) } |
| func (x *harness) shutdown() { x.ctl.ShutdownForTest() } |
| // authLinks counts rastrillo's unclicked magic links. It is the app's |
| -// own table, not Meet's, which is the point: nothing deletes a row there |
| +// own table, not Calls', which is the point: nothing deletes a row there |
| // but presenting the token or sweeping. |
| func (x *harness) authLinks(t *testing.T) int { |
| t.Helper() |
| @@ -144,7 +144,7 @@ func (x *harness) authLinks(t *testing.T) int { |
| return n |
| } |
| -// pendingJoins counts Meet's own pending_joins rows directly — used to |
| +// pendingJoins counts Calls' own pending_joins rows directly — used to |
| // confirm a scenario actually wrote the row it means to test the expiry |
| // of, rather than trusting a same-answer redirect alone: POST /signin's |
| // "?sent=1" also covers a request that never wrote anything (Codex |
| @@ -225,7 +225,7 @@ func newHarnessWithLogger(t *testing.T, env string, logger *slog.Logger, members |
| if err != nil { |
| t.Fatal(err) |
| } |
| - // The base is now, not a fixed date. Meet's clock is the only one a |
| + // The base is now, not a fixed date. Calls' clock is the only one a |
| // test can move; rastrillo stamps its auth_links rows from the real |
| // one. A fixed base put the two most of a day apart, so nothing that |
| // compares them could mean anything — see the auth_links sweep test. |
diff --git a/internal/callstest/ice_test.go b/internal/callstest/ice_test.go| index 7761a52..b9b0380 100644 |
| --- a/internal/callstest/ice_test.go |
| +++ b/internal/callstest/ice_test.go |
| @@ -252,7 +252,7 @@ func TestIceWithNoRelayIsAnEmptyList(t *testing.T) { |
| func TestIceTestTTLHeaderIsHonouredOnlyInDevelopment(t *testing.T) { |
| withHeader := func(c *client, target, ttl string) *httptest.ResponseRecorder { |
| req := httptest.NewRequest(http.MethodGet, target, nil) |
| - req.Header.Set("X-Meet-Test-Ice-TTL", ttl) |
| + req.Header.Set("X-Calls-Test-Ice-TTL", ttl) |
| return c.do(req) |
| } |
| @@ -526,7 +526,7 @@ func TestIceHeaderClampsExtremeValues(t *testing.T) { |
| ask := func(ttl string) iceAnswer { |
| t.Helper() |
| req := httptest.NewRequest(http.MethodGet, "/m/"+sqid+"/ice?peer="+peer, nil) |
| - req.Header.Set("X-Meet-Test-Ice-TTL", ttl) |
| + req.Header.Set("X-Calls-Test-Ice-TTL", ttl) |
| rec := c.do(req) |
| if rec.Code != http.StatusOK { |
| t.Fatalf("ttl=%q: %d %s", ttl, rec.Code, rec.Body.String()) |
diff --git a/internal/callstest/meetings_test.go b/internal/callstest/meetings_test.go| index 7275d36..57ed8d7 100644 |
| --- a/internal/callstest/meetings_test.go |
| +++ b/internal/callstest/meetings_test.go |
| @@ -44,7 +44,7 @@ func TestCreateShowsTheLinkOnceAndTheListNever(t *testing.T) { |
| // TestStartCallShowsTheLinkOnceAndListsItUnderUpcoming is the one-click |
| // button above "New meeting": a member POSTs with no form fields at |
| // all, and gets the same link-once page a scheduled meeting's creation |
| -// does, with a title Meet minted itself. |
| +// does, with a title Calls minted itself. |
| func TestStartCallShowsTheLinkOnceAndListsItUnderUpcoming(t *testing.T) { |
| x := newHarness(t, "paul@example.com") |
| c := x.browser(t) |
diff --git a/internal/callstest/room_test.go b/internal/callstest/room_test.go| index d00f0db..707b1d2 100644 |
| --- a/internal/callstest/room_test.go |
| +++ b/internal/callstest/room_test.go |
| @@ -472,7 +472,7 @@ func TestRoomPageLoadsRoomScriptFromTheHeadAndHidesTheRoom(t *testing.T) { |
| // The chat panel is estilo's first chat (§6, §10): one self-contained |
| // partial and one script, so a second app can adopt both files |
| -// unchanged. Meet's job here is only to mount it — inside #room, after |
| +// unchanged. Calls' job here is only to mount it — inside #room, after |
| // the controls and before the admission queue — and to load its two |
| // files the way every other room asset loads, from layout's head block |
| // with defer, because the page's CSP is default-src 'self' and nothing |
diff --git a/native/apple/Package.swift b/native/apple/Package.swift| index 546f1d8..9f3b436 100644 |
| --- a/native/apple/Package.swift |
| +++ b/native/apple/Package.swift |
| @@ -2,22 +2,22 @@ |
| import PackageDescription |
| let package = Package( |
| - name: "MeetNative", |
| + name: "CallsNative", |
| platforms: [.macOS(.v14), .iOS(.v17)], |
| products: [ |
| - .library(name: "MeetKit", targets: ["MeetKit"]), |
| - .executable(name: "MeetMac", targets: ["MeetMac"]), |
| - .executable(name: "MeetInterop", targets: ["MeetInterop"]), |
| + .library(name: "CallsKit", targets: ["CallsKit"]), |
| + .executable(name: "CallsMac", targets: ["CallsMac"]), |
| + .executable(name: "CallsInterop", targets: ["CallsInterop"]), |
| ], |
| dependencies: [ |
| .package(url: "https://github.com/stasel/WebRTC.git", exact: "152.0.0") |
| ], |
| targets: [ |
| - .binaryTarget(name: "MeetBridge", path: "../build/MeetBridge.xcframework"), |
| + .binaryTarget(name: "CallsBridge", path: "../build/CallsBridge.xcframework"), |
| .target( |
| - name: "MeetKit", dependencies: ["MeetBridge", .product(name: "WebRTC", package: "WebRTC")]), |
| - .executableTarget(name: "MeetMac", dependencies: ["MeetKit"], resources: [.copy("Resources/AppIcon.png"), .copy("Resources/MacIcon.png")]), |
| - .executableTarget(name: "MeetInterop", dependencies: ["MeetKit"]), |
| - .testTarget(name: "MeetKitTests", dependencies: ["MeetKit"]), |
| + name: "CallsKit", dependencies: ["CallsBridge", .product(name: "WebRTC", package: "WebRTC")]), |
| + .executableTarget(name: "CallsMac", dependencies: ["CallsKit"], resources: [.copy("Resources/AppIcon.png"), .copy("Resources/MacIcon.png")]), |
| + .executableTarget(name: "CallsInterop", dependencies: ["CallsKit"]), |
| + .testTarget(name: "CallsKitTests", dependencies: ["CallsKit"]), |
| ] |
| ) |
diff --git a/native/apple/Sources/MeetInterop/Interop.swift b/native/apple/Sources/CallsInterop/Interop.swift| similarity index 97% |
| rename from native/apple/Sources/MeetInterop/Interop.swift |
| rename to native/apple/Sources/CallsInterop/Interop.swift |
| index ec757d2..bedb8e0 100644 |
| --- a/native/apple/Sources/MeetInterop/Interop.swift |
| +++ b/native/apple/Sources/CallsInterop/Interop.swift |
| @@ -1,10 +1,10 @@ |
| import AppKit |
| import Foundation |
| -import MeetKit |
| +import CallsKit |
| import SwiftUI |
| // A separate test executable: synthetic video and fixture credentials are never |
| -// compiled into MeetMac. Input travels on stdin, not argv or a saved file. |
| +// compiled into CallsMac. Input travels on stdin, not argv or a saved file. |
| struct Input: Decodable { |
| let origin: String |
| let room: String |
| @@ -120,7 +120,7 @@ struct Input: Decodable { |
| ] { |
| view.rootView = AnyView( |
| MacCallView(call: call, grid: grid, showingChat: chat, leave: {}).id(name) |
| - .padding(20).tint(MeetAppearance.accent).background(Color.white) |
| + .padding(20).tint(CallsAppearance.accent).background(Color.white) |
| .environment(\.colorScheme, .light)) |
| window.setContentSize(NSSize(width: 900, height: 540)) |
| try? await Task.sleep(for: .milliseconds(300)) |
diff --git a/native/apple/Sources/MeetInterop/LobbySnapshots.swift b/native/apple/Sources/CallsInterop/LobbySnapshots.swift| similarity index 95% |
| rename from native/apple/Sources/MeetInterop/LobbySnapshots.swift |
| rename to native/apple/Sources/CallsInterop/LobbySnapshots.swift |
| index e9a5d5f..77e1955 100644 |
| --- a/native/apple/Sources/MeetInterop/LobbySnapshots.swift |
| +++ b/native/apple/Sources/CallsInterop/LobbySnapshots.swift |
| @@ -1,5 +1,5 @@ |
| import AppKit |
| -import MeetKit |
| +import CallsKit |
| import SwiftUI |
| /// Offline visual fixtures of the shipping lobby. Only built into the test executable. |
| @@ -10,7 +10,7 @@ import SwiftUI |
| try FileManager.default.createDirectory(at: folder, withIntermediateDirectories: true) |
| for scheme in [ColorScheme.light, .dark] { |
| for state in ["welcome", "signin", "ready", "error"] { |
| - let model = MeetModel() |
| + let model = CallsModel() |
| if state == "signin" { |
| model.authenticating = true |
| model.confirmationCode = "A1B2-C3D4" |
| @@ -22,7 +22,7 @@ import SwiftUI |
| } |
| if state == "error" { model.error = "Enter a full meeting or invitation link." } |
| let view = NSHostingView( |
| - rootView: MeetLobby(model: model).background( |
| + rootView: CallsLobby(model: model).background( |
| scheme == .dark ? Color(white: 0.12) : Color(white: 0.98) |
| ).environment(\.colorScheme, scheme)) |
| let window = NSWindow( |
diff --git a/native/apple/Sources/MeetInterop/SyntheticVideo.swift b/native/apple/Sources/CallsInterop/SyntheticVideo.swift| similarity index 98% |
| rename from native/apple/Sources/MeetInterop/SyntheticVideo.swift |
| rename to native/apple/Sources/CallsInterop/SyntheticVideo.swift |
| index faa3307..5f3742e 100644 |
| --- a/native/apple/Sources/MeetInterop/SyntheticVideo.swift |
| +++ b/native/apple/Sources/CallsInterop/SyntheticVideo.swift |
| @@ -1,6 +1,6 @@ |
| import CoreVideo |
| import Foundation |
| -import MeetKit |
| +import CallsKit |
| import WebRTC |
| @MainActor final class SyntheticVideo: VideoCapture { |
diff --git a/native/apple/Sources/MeetKit/Call.swift b/native/apple/Sources/CallsKit/Call.swift| similarity index 98% |
| rename from native/apple/Sources/MeetKit/Call.swift |
| rename to native/apple/Sources/CallsKit/Call.swift |
| index a1fdfe9..aed8006 100644 |
| --- a/native/apple/Sources/MeetKit/Call.swift |
| +++ b/native/apple/Sources/CallsKit/Call.swift |
| @@ -1,7 +1,7 @@ |
| import Combine |
| import Foundation |
| // Go serializes this API with a mutex; Objective-C bindings carry no Sendable annotation. |
| -@preconcurrency import MeetBridge |
| +@preconcurrency import CallsBridge |
| import WebRTC |
| // The Go callback only enqueues. The main actor owns the interface and media; |
| @@ -28,7 +28,7 @@ private final class Events: NSObject, BridgeListenerProtocol { |
| @MainActor public final class Call: ObservableObject { |
| @Published public private(set) var state: RoomState? |
| - @Published public private(set) var title = "Meet" |
| + @Published public private(set) var title = "Calls" |
| @Published public private(set) var standing = "" |
| @Published public private(set) var status = "Ready to join" |
| @Published public private(set) var remoteTracks: [String: RTCVideoTrack] = [:] |
| @@ -71,7 +71,7 @@ private final class Events: NSObject, BridgeListenerProtocol { |
| let listener = Events(call: self, epoch: epoch) |
| var error: NSError? |
| guard let client = BridgeNewClient(origin, room, cookies, listener, &error) else { |
| - throw error ?? NSError(domain: "Meet", code: 1) |
| + throw error ?? NSError(domain: "Calls", code: 1) |
| } |
| events = listener |
| bridge = client |
| @@ -79,7 +79,7 @@ private final class Events: NSObject, BridgeListenerProtocol { |
| cameraOff = false |
| chat = [] |
| receivedChatCount = 0 |
| - title = "Meet" |
| + title = "Calls" |
| standing = "" |
| try await media.prepare(capture: capture) |
| guard epoch == joiningEpoch, bridge === client else { throw CancellationError() } |
diff --git a/native/apple/Sources/MeetKit/CallActionStyle.swift b/native/apple/Sources/CallsKit/CallActionStyle.swift| similarity index 90% |
| rename from native/apple/Sources/MeetKit/CallActionStyle.swift |
| rename to native/apple/Sources/CallsKit/CallActionStyle.swift |
| index 3a1bd4e..2d99e34 100644 |
| --- a/native/apple/Sources/MeetKit/CallActionStyle.swift |
| +++ b/native/apple/Sources/CallsKit/CallActionStyle.swift |
| @@ -6,7 +6,7 @@ public struct CallActionStyle: ButtonStyle { |
| public var emphasized: Bool |
| @Environment(\.isEnabled) private var isEnabled |
| - public init(color: Color = MeetAppearance.accent, emphasized: Bool = false) { |
| + public init(color: Color = CallsAppearance.accent, emphasized: Bool = false) { |
| self.color = color |
| self.emphasized = emphasized |
| } |
diff --git a/native/apple/Sources/MeetKit/CallControl.swift b/native/apple/Sources/CallsKit/CallControl.swift| similarity index 100% |
| rename from native/apple/Sources/MeetKit/CallControl.swift |
| rename to native/apple/Sources/CallsKit/CallControl.swift |
diff --git a/native/apple/Sources/MeetKit/MeetAppearance.swift b/native/apple/Sources/CallsKit/CallsAppearance.swift| similarity index 58% |
| rename from native/apple/Sources/MeetKit/MeetAppearance.swift |
| rename to native/apple/Sources/CallsKit/CallsAppearance.swift |
| index d23660c..887232f 100644 |
| --- a/native/apple/Sources/MeetKit/MeetAppearance.swift |
| +++ b/native/apple/Sources/CallsKit/CallsAppearance.swift |
| @@ -1,7 +1,7 @@ |
| import SwiftUI |
| -/// Meet's first native palette; app-specific until a second app adopts it. |
| -public enum MeetAppearance { |
| +/// Calls's first native palette; app-specific until a second app adopts it. |
| +public enum CallsAppearance { |
| public static let accent = Color(red: 0.03, green: 0.49, blue: 0.54) |
| public static let background = Color.primary.opacity(0.035) |
| } |
diff --git a/native/apple/Sources/MeetKit/MeetLobby.swift b/native/apple/Sources/CallsKit/CallsLobby.swift| similarity index 92% |
| rename from native/apple/Sources/MeetKit/MeetLobby.swift |
| rename to native/apple/Sources/CallsKit/CallsLobby.swift |
| index d824e8c..2046256 100644 |
| --- a/native/apple/Sources/MeetKit/MeetLobby.swift |
| +++ b/native/apple/Sources/CallsKit/CallsLobby.swift |
| @@ -1,11 +1,11 @@ |
| import SwiftUI |
| /// The same joining ceremony on Mac, iPhone and iPad. Authentication stays in the model. |
| -@MainActor public struct MeetLobby: View { |
| - @ObservedObject private var model: MeetModel |
| +@MainActor public struct CallsLobby: View { |
| + @ObservedObject private var model: CallsModel |
| @Environment(\.colorScheme) private var colorScheme |
| - public init(model: MeetModel) { self.model = model } |
| + public init(model: CallsModel) { self.model = model } |
| public var body: some View { |
| ScrollView { |
| @@ -47,7 +47,7 @@ import SwiftUI |
| Button("Choose another meeting") { model.signedIn = false } |
| .buttonStyle(.bordered) |
| #if os(iOS) |
| - Text("Keep Meet open during your call. Switching to another app ends the call.") |
| + Text("Keep Calls open during your call. Switching to another app ends the call.") |
| .font(.footnote).foregroundStyle(.secondary) |
| #endif |
| } else { |
| @@ -84,8 +84,8 @@ import SwiftUI |
| }.frame(maxWidth: 480, alignment: .leading).padding(32) |
| .frame(maxWidth: .infinity, minHeight: 540) |
| } |
| - .background(MeetAppearance.background) |
| - .tint(MeetAppearance.accent) |
| + .background(CallsAppearance.background) |
| + .tint(CallsAppearance.accent) |
| } |
| private var heading: LocalizedStringKey { |
| @@ -97,7 +97,7 @@ import SwiftUI |
| private var subheading: LocalizedStringKey { |
| if model.authenticating { |
| return |
| - "Open the emailed link in your browser, then confirm “Sign in to Meet app”. We’ll continue here automatically." |
| + "Open the emailed link in your browser, then confirm “Sign in to Calls app”. We’ll continue here automatically." |
| } |
| if model.signedIn { return "You’re signed in. Join when you’re ready." } |
| return "A place for your team to come together." |
diff --git a/native/apple/Sources/MeetKit/MeetModel.swift b/native/apple/Sources/CallsKit/CallsModel.swift| similarity index 95% |
| rename from native/apple/Sources/MeetKit/MeetModel.swift |
| rename to native/apple/Sources/CallsKit/CallsModel.swift |
| index 86af864..92a9a27 100644 |
| --- a/native/apple/Sources/MeetKit/MeetModel.swift |
| +++ b/native/apple/Sources/CallsKit/CallsModel.swift |
| @@ -1,6 +1,6 @@ |
| import Combine |
| import Foundation |
| -@preconcurrency import MeetBridge |
| +@preconcurrency import CallsBridge |
| #if os(iOS) |
| import UIKit |
| @@ -8,7 +8,7 @@ import Foundation |
| import AppKit |
| #endif |
| -@MainActor public final class MeetModel: ObservableObject { |
| +@MainActor public final class CallsModel: ObservableObject { |
| @Published public var address = "" |
| @Published public var error = "" |
| @Published public var signin: URL? |
| @@ -36,7 +36,7 @@ import Foundation |
| let auth = try await Task.detached { |
| var error: NSError? |
| guard let auth = BridgeBeginAuthentication(address, &error) else { |
| - throw error ?? NSError(domain: "Meet", code: 1) |
| + throw error ?? NSError(domain: "Calls", code: 1) |
| } |
| return auth |
| }.value |
| @@ -48,7 +48,7 @@ import Foundation |
| guard let url = URL(string: auth.browserURL()), await openBrowser(url) else { |
| auth.cancel() |
| throw NSError( |
| - domain: "Meet", code: 2, |
| + domain: "Calls", code: 2, |
| userInfo: [NSLocalizedDescriptionKey: "Could not open your browser."]) |
| } |
| guard epoch == authEpoch else { |
diff --git a/native/apple/Sources/MeetKit/Capture.swift b/native/apple/Sources/CallsKit/Capture.swift| similarity index 94% |
| rename from native/apple/Sources/MeetKit/Capture.swift |
| rename to native/apple/Sources/CallsKit/Capture.swift |
| index ca547f7..533d30c 100644 |
| --- a/native/apple/Sources/MeetKit/Capture.swift |
| +++ b/native/apple/Sources/CallsKit/Capture.swift |
| @@ -19,7 +19,7 @@ import WebRTC |
| guard preparing == epoch else { throw CancellationError() } |
| if !granted { |
| throw NSError( |
| - domain: "Meet", code: 2, |
| + domain: "Calls", code: 2, |
| userInfo: [ |
| NSLocalizedDescriptionKey: |
| "Allow camera and microphone access in Settings to join." |
| @@ -39,7 +39,7 @@ import WebRTC |
| }) |
| else { |
| throw NSError( |
| - domain: "Meet", code: 3, userInfo: [NSLocalizedDescriptionKey: "No camera is available."]) |
| + domain: "Calls", code: 3, userInfo: [NSLocalizedDescriptionKey: "No camera is available."]) |
| } |
| let capture = RTCCameraVideoCapturer(delegate: source) |
| capturer = capture |
diff --git a/native/apple/Sources/MeetKit/ChatDraft.swift b/native/apple/Sources/CallsKit/ChatDraft.swift| similarity index 100% |
| rename from native/apple/Sources/MeetKit/ChatDraft.swift |
| rename to native/apple/Sources/CallsKit/ChatDraft.swift |
diff --git a/native/apple/Sources/MeetKit/ChatView.swift b/native/apple/Sources/CallsKit/ChatView.swift| similarity index 100% |
| rename from native/apple/Sources/MeetKit/ChatView.swift |
| rename to native/apple/Sources/CallsKit/ChatView.swift |
diff --git a/native/apple/Sources/MeetKit/MacCallView.swift b/native/apple/Sources/CallsKit/MacCallView.swift| similarity index 98% |
| rename from native/apple/Sources/MeetKit/MacCallView.swift |
| rename to native/apple/Sources/CallsKit/MacCallView.swift |
| index 66dcb4b..04ac523 100644 |
| --- a/native/apple/Sources/MeetKit/MacCallView.swift |
| +++ b/native/apple/Sources/CallsKit/MacCallView.swift |
| @@ -122,7 +122,7 @@ |
| description: Text("Your meeting is ready. Others will appear here when they join.") |
| ) |
| .frame(maxWidth: .infinity, maxHeight: .infinity) |
| - .background(MeetAppearance.background, in: RoundedRectangle(cornerRadius: 16)) |
| + .background(CallsAppearance.background, in: RoundedRectangle(cornerRadius: 16)) |
| } |
| MacVideoTile( |
| track: call.localTrack, label: "You", mirrored: true, cameraOff: call.cameraOff |
| @@ -145,7 +145,7 @@ |
| ) { call.mute() } |
| .buttonStyle( |
| CallActionStyle( |
| - color: call.muted ? Color(red: 0.65, green: 0.30, blue: 0.02) : MeetAppearance.accent, |
| + color: call.muted ? Color(red: 0.65, green: 0.30, blue: 0.02) : CallsAppearance.accent, |
| emphasized: call.muted) |
| ) |
| .help(call.muted ? "Unmute microphone" : "Mute microphone") |
diff --git a/native/apple/Sources/MeetKit/MacChatWindow.swift b/native/apple/Sources/CallsKit/MacChatWindow.swift| similarity index 95% |
| rename from native/apple/Sources/MeetKit/MacChatWindow.swift |
| rename to native/apple/Sources/CallsKit/MacChatWindow.swift |
| index ff2e873..1564241 100644 |
| --- a/native/apple/Sources/MeetKit/MacChatWindow.swift |
| +++ b/native/apple/Sources/CallsKit/MacChatWindow.swift |
| @@ -21,7 +21,7 @@ |
| window.isReleasedWhenClosed = false |
| window.contentView = NSHostingView( |
| rootView: ChatView(call: call, draft: draft) |
| - .padding(20).tint(MeetAppearance.accent)) |
| + .padding(20).tint(CallsAppearance.accent)) |
| window.delegate = self |
| self.window = window |
| isOpen = true |
diff --git a/native/apple/Sources/MeetKit/MacVideoTile.swift b/native/apple/Sources/CallsKit/MacVideoTile.swift| similarity index 100% |
| rename from native/apple/Sources/MeetKit/MacVideoTile.swift |
| rename to native/apple/Sources/CallsKit/MacVideoTile.swift |
diff --git a/native/apple/Sources/MeetKit/Media.swift b/native/apple/Sources/CallsKit/Media.swift| similarity index 100% |
| rename from native/apple/Sources/MeetKit/Media.swift |
| rename to native/apple/Sources/CallsKit/Media.swift |
diff --git a/native/apple/Sources/MeetKit/MeetingShareButton.swift b/native/apple/Sources/CallsKit/MeetingShareButton.swift| similarity index 100% |
| rename from native/apple/Sources/MeetKit/MeetingShareButton.swift |
| rename to native/apple/Sources/CallsKit/MeetingShareButton.swift |
diff --git a/native/apple/Sources/MeetKit/Wire.swift b/native/apple/Sources/CallsKit/Wire.swift| similarity index 100% |
| rename from native/apple/Sources/MeetKit/Wire.swift |
| rename to native/apple/Sources/CallsKit/Wire.swift |
diff --git a/native/apple/Sources/MeetMac/MeetMac.swift b/native/apple/Sources/CallsMac/CallsMac.swift| similarity index 64% |
| rename from native/apple/Sources/MeetMac/MeetMac.swift |
| rename to native/apple/Sources/CallsMac/CallsMac.swift |
| index 54d21c1..a70d59a 100644 |
| --- a/native/apple/Sources/MeetMac/MeetMac.swift |
| +++ b/native/apple/Sources/CallsMac/CallsMac.swift |
| @@ -1,14 +1,14 @@ |
| import AppKit |
| -@preconcurrency import MeetBridge |
| -import MeetKit |
| +@preconcurrency import CallsBridge |
| +import CallsKit |
| import SwiftUI |
| import WebRTC |
| -@main struct MeetMacApp: App { |
| - @NSApplicationDelegateAdaptor(MeetAppDelegate.self) private var appDelegate |
| - @StateObject private var model = MeetModel() |
| +@main struct CallsMacApp: App { |
| + @NSApplicationDelegateAdaptor(CallsAppDelegate.self) private var appDelegate |
| + @StateObject private var model = CallsModel() |
| var body: some Scene { |
| - Window("Meet", id: "main") { |
| + Window("Calls", id: "main") { |
| ContentView(model: model).frame(minWidth: 760, minHeight: 540).onDisappear { model.leave() } |
| } |
| .defaultSize(width: 1000, height: 760) |
| @@ -16,7 +16,7 @@ import WebRTC |
| } |
| } |
| -final class MeetAppDelegate: NSObject, NSApplicationDelegate { |
| +final class CallsAppDelegate: NSObject, NSApplicationDelegate { |
| func applicationDidFinishLaunching(_ notification: Notification) { |
| if let url = Bundle.main.url(forResource: "MacIcon", withExtension: "png") |
| ?? Bundle.module.url(forResource: "MacIcon", withExtension: "png") |
| @@ -27,14 +27,14 @@ final class MeetAppDelegate: NSObject, NSApplicationDelegate { |
| } |
| struct ContentView: View { |
| - @ObservedObject var model: MeetModel |
| + @ObservedObject var model: CallsModel |
| var body: some View { |
| Group { |
| if model.joining { |
| MacCallView(call: model.call, leave: model.leave).padding(24) |
| } else { |
| - MeetLobby(model: model) |
| + CallsLobby(model: model) |
| } |
| - }.tint(MeetAppearance.accent) |
| + }.tint(CallsAppearance.accent) |
| } |
| } |
diff --git a/native/apple/Sources/MeetMac/Resources/AppIcon.png b/native/apple/Sources/CallsMac/Resources/AppIcon.png| similarity index 100% |
| rename from native/apple/Sources/MeetMac/Resources/AppIcon.png |
| rename to native/apple/Sources/CallsMac/Resources/AppIcon.png |
diff --git a/native/apple/Sources/MeetMac/Resources/MacIcon.png b/native/apple/Sources/CallsMac/Resources/MacIcon.png| similarity index 100% |
| rename from native/apple/Sources/MeetMac/Resources/MacIcon.png |
| rename to native/apple/Sources/CallsMac/Resources/MacIcon.png |
diff --git a/native/apple/Tests/MeetKitTests/ChatWindowTests.swift b/native/apple/Tests/CallsKitTests/ChatWindowTests.swift| similarity index 86% |
| rename from native/apple/Tests/MeetKitTests/ChatWindowTests.swift |
| rename to native/apple/Tests/CallsKitTests/ChatWindowTests.swift |
| index e346caf..623f4cb 100644 |
| --- a/native/apple/Tests/MeetKitTests/ChatWindowTests.swift |
| +++ b/native/apple/Tests/CallsKitTests/ChatWindowTests.swift |
| @@ -1,7 +1,7 @@ |
| import AppKit |
| import XCTest |
| -@testable import MeetKit |
| +@testable import CallsKit |
| final class ChatWindowTests: XCTestCase { |
| @MainActor func testClosingAndReopeningRetainsDraftWithoutDuplicatingWindow() { |
| @@ -11,10 +11,10 @@ final class ChatWindowTests: XCTestCase { |
| presentation.draft.text = "Keep this unsent message" |
| presentation.open(call: call) |
| XCTAssertTrue(presentation.isOpen) |
| - let first = NSApp.windows.first { $0.title == "Chat — Meet" } |
| + let first = NSApp.windows.first { $0.title == "Chat — Calls" } |
| XCTAssertNotNil(first) |
| presentation.open(call: call) |
| - XCTAssertEqual(NSApp.windows.filter { $0.title == "Chat — Meet" }.count, 1) |
| + XCTAssertEqual(NSApp.windows.filter { $0.title == "Chat — Calls" }.count, 1) |
| presentation.close() |
| XCTAssertFalse(presentation.isOpen) |
| XCTAssertEqual(presentation.draft.text, "Keep this unsent message") |
| @@ -28,7 +28,7 @@ final class ChatWindowTests: XCTestCase { |
| NSApplication.shared.setActivationPolicy(.prohibited) |
| let presentation = MacChatWindow() |
| presentation.open(call: Call(playAudio: false)) |
| - let window = NSApp.windows.first { $0.title == "Chat — Meet" } |
| + let window = NSApp.windows.first { $0.title == "Chat — Calls" } |
| XCTAssertNotNil(window) |
| window?.performClose(nil) |
| XCTAssertFalse(presentation.isOpen) |
diff --git a/native/bridge/bridge.go b/native/bridge/bridge.go| index 6f2e013..e89ccfa 100644 |
| --- a/native/bridge/bridge.go |
| +++ b/native/bridge/bridge.go |
| @@ -1,5 +1,5 @@ |
| // Package bridge is the deliberately small gomobile surface. It imports only |
| -// Meet's client core, never the database, server, or at-rest encryption keys. |
| +// Calls' client core, never the database, server, or at-rest encryption keys. |
| package bridge |
| import ( |
| @@ -28,7 +28,7 @@ func NewClient(origin, room, cookiesJSON string, listener Listener) (*Client, er |
| } |
| u, err := url.Parse(origin) |
| if err != nil { |
| - return nil, errors.New("invalid Meet origin") |
| + return nil, errors.New("invalid Calls origin") |
| } |
| var cookies []struct { |
| Name string `json:"name"` |
| @@ -44,17 +44,17 @@ func NewClient(origin, room, cookiesJSON string, listener Listener) (*Client, er |
| continue |
| } |
| if session { |
| - return nil, errors.New("ambiguous Meet session") |
| + return nil, errors.New("ambiguous Calls session") |
| } |
| raw, err := base64.RawURLEncoding.DecodeString(c.Value) |
| if err != nil || len(raw) != 32 || base64.RawURLEncoding.EncodeToString(raw) != c.Value { |
| - return nil, errors.New("invalid Meet session") |
| + return nil, errors.New("invalid Calls session") |
| } |
| session = true |
| jar.SetCookies(u, []*http.Cookie{{Name: c.Name, Value: c.Value, Path: "/", Secure: u.Scheme == "https", HttpOnly: true}}) |
| } |
| if !session { |
| - return nil, errors.New("sign in to Meet first") |
| + return nil, errors.New("sign in to Calls first") |
| } |
| r, err := callscore.New(origin, room, &http.Client{Jar: jar}, func(event callscore.Event) { |
| b, err := json.Marshal(event) |
diff --git a/native/ios/CallsPhone.xcodeproj/project.pbxproj b/native/ios/CallsPhone.xcodeproj/project.pbxproj| new file mode 100644 |
| index 0000000..1cc129a |
| --- /dev/null |
| +++ b/native/ios/CallsPhone.xcodeproj/project.pbxproj |
| @@ -0,0 +1,605 @@ |
| +// !$*UTF8*$! |
| +{ |
| + archiveVersion = 1; |
| + classes = { |
| + }; |
| + objectVersion = 77; |
| + objects = { |
| + |
| +/* Begin PBXBuildFile section */ |
| + 38C4255DE6ABF3B193EB7F8B /* SilentAudioDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D9794BF01126684E45D1A32 /* SilentAudioDevice.swift */; }; |
| + 42FC191A9EE2C0D8672CBC36 /* CallsKit in Frameworks */ = {isa = PBXBuildFile; productRef = 9EB26E9DC9CC7C30FA3F52A1 /* CallsKit */; }; |
| + 73E411583065A93EA9D0C587 /* CallsPhone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522D2A9FF4CA22466FCE7514 /* CallsPhone.swift */; }; |
| + 7BFBBC51165D509308EC8160 /* CallsPhoneUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74999D3E92408DD6C09F8C3 /* CallsPhoneUITests.swift */; }; |
| + AB79422E2C8D346FE897EB8E /* SyntheticVideo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47597AF8F1536C5BCEFF51D8 /* SyntheticVideo.swift */; }; |
| + C4CD8034FD096787E6D5AC15 /* CallsPhoneTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F326C173CD4BBB78B2A39A6F /* CallsPhoneTests.swift */; }; |
| + CE43A3BDCA1021ADDA819A7C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2617A7D5255352D7F9E69EEA /* Assets.xcassets */; }; |
| + DD0E4E88ABC34A4464C4A5DA /* CallsKit in Frameworks */ = {isa = PBXBuildFile; productRef = 37AECACF92E2D38E016985D7 /* CallsKit */; }; |
| + F7CBB8632BD4A093EBF647EC /* LICENSE.lucide in Resources */ = {isa = PBXBuildFile; fileRef = 47BA19DB06D308C6B61ECD97 /* LICENSE.lucide */; }; |
| +/* End PBXBuildFile section */ |
| + |
| +/* Begin PBXContainerItemProxy section */ |
| + 00039816D569E71434A031AC /* PBXContainerItemProxy */ = { |
| + isa = PBXContainerItemProxy; |
| + containerPortal = 682FB0E7F101580A0D656294 /* Project object */; |
| + proxyType = 1; |
| + remoteGlobalIDString = 3E5F723EFC48342C4FAA88ED; |
| + remoteInfo = CallsPhone; |
| + }; |
| + 25103338B684DC807606221F /* PBXContainerItemProxy */ = { |
| + isa = PBXContainerItemProxy; |
| + containerPortal = 682FB0E7F101580A0D656294 /* Project object */; |
| + proxyType = 1; |
| + remoteGlobalIDString = 3E5F723EFC48342C4FAA88ED; |
| + remoteInfo = CallsPhone; |
| + }; |
| +/* End PBXContainerItemProxy section */ |
| + |
| +/* Begin PBXFileReference section */ |
| + 1D9794BF01126684E45D1A32 /* SilentAudioDevice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SilentAudioDevice.swift; sourceTree = "<group>"; }; |
| + 1EEC6AEF623DBA0B1C37B273 /* CallsPhone.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = CallsPhone.app; sourceTree = BUILT_PRODUCTS_DIR; }; |
| + 238D6419A15E3D9FEEE1B95D /* CallsPhoneUITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = CallsPhoneUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; |
| + 2617A7D5255352D7F9E69EEA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; |
| + 44A4B123A90219B181715E11 /* apple */ = {isa = PBXFileReference; lastKnownFileType = folder; name = apple; path = ../apple; sourceTree = SOURCE_ROOT; }; |
| + 47597AF8F1536C5BCEFF51D8 /* SyntheticVideo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyntheticVideo.swift; sourceTree = "<group>"; }; |
| + 47BA19DB06D308C6B61ECD97 /* LICENSE.lucide */ = {isa = PBXFileReference; path = LICENSE.lucide; sourceTree = "<group>"; }; |
| + 522D2A9FF4CA22466FCE7514 /* CallsPhone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallsPhone.swift; sourceTree = "<group>"; }; |
| + D74999D3E92408DD6C09F8C3 /* CallsPhoneUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallsPhoneUITests.swift; sourceTree = "<group>"; }; |
| + DF5962C9FB8AAAE3D274F9B4 /* CallsPhoneTests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = CallsPhoneTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; |
| + F326C173CD4BBB78B2A39A6F /* CallsPhoneTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallsPhoneTests.swift; sourceTree = "<group>"; }; |
| +/* End PBXFileReference section */ |
| + |
| +/* Begin PBXFrameworksBuildPhase section */ |
| + 52B69C8ED02DD5290E5725B8 /* Frameworks */ = { |
| + isa = PBXFrameworksBuildPhase; |
| + buildActionMask = 2147483647; |
| + files = ( |
| + 42FC191A9EE2C0D8672CBC36 /* CallsKit in Frameworks */, |
| + ); |
| + runOnlyForDeploymentPostprocessing = 0; |
| + }; |
| + 54925C70240D54E0EA2BFC81 /* Frameworks */ = { |
| + isa = PBXFrameworksBuildPhase; |
| + buildActionMask = 2147483647; |
| + files = ( |
| + DD0E4E88ABC34A4464C4A5DA /* CallsKit in Frameworks */, |
| + ); |
| + runOnlyForDeploymentPostprocessing = 0; |
| + }; |
| +/* End PBXFrameworksBuildPhase section */ |
| + |
| +/* Begin PBXGroup section */ |
| + 26FB571E7AEE92B53C942D4A /* Products */ = { |
| + isa = PBXGroup; |
| + children = ( |
| + 1EEC6AEF623DBA0B1C37B273 /* CallsPhone.app */, |
| + DF5962C9FB8AAAE3D274F9B4 /* CallsPhoneTests.xctest */, |
| + 238D6419A15E3D9FEEE1B95D /* CallsPhoneUITests.xctest */, |
| + ); |
| + name = Products; |
| + sourceTree = "<group>"; |
| + }; |
| + 37001BC65687136CC142306B /* CallsInterop */ = { |
| + isa = PBXGroup; |
| + children = ( |
| + 47597AF8F1536C5BCEFF51D8 /* SyntheticVideo.swift */, |
| + ); |
| + name = CallsInterop; |
| + path = ../apple/Sources/CallsInterop; |
| + sourceTree = "<group>"; |
| + }; |
| + 462A9AF15F4A859BC1F3D6CA /* Sources */ = { |
| + isa = PBXGroup; |
| + children = ( |
| + 522D2A9FF4CA22466FCE7514 /* CallsPhone.swift */, |
| + ); |
| + path = Sources; |
| + sourceTree = "<group>"; |
| + }; |
| + 8EF1EE70527380231F68CB59 /* UITests */ = { |
| + isa = PBXGroup; |
| + children = ( |
| + D74999D3E92408DD6C09F8C3 /* CallsPhoneUITests.swift */, |
| + ); |
| + path = UITests; |
| + sourceTree = "<group>"; |
| + }; |
| + 913EB0FEA4493ED3BC278378 /* native */ = { |
| + isa = PBXGroup; |
| + children = ( |
| + 47BA19DB06D308C6B61ECD97 /* LICENSE.lucide */, |
| + ); |
| + name = native; |
| + path = ..; |
| + sourceTree = "<group>"; |
| + }; |
| + BAD10FDBF936868292CD1359 /* Tests */ = { |
| + isa = PBXGroup; |
| + children = ( |
| + F326C173CD4BBB78B2A39A6F /* CallsPhoneTests.swift */, |
| + 1D9794BF01126684E45D1A32 /* SilentAudioDevice.swift */, |
| + ); |
| + path = Tests; |
| + sourceTree = "<group>"; |
| + }; |
| + BC282AA18B3E496243985A97 = { |
| + isa = PBXGroup; |
| + children = ( |
| + 2617A7D5255352D7F9E69EEA /* Assets.xcassets */, |
| + 37001BC65687136CC142306B /* CallsInterop */, |
| + 913EB0FEA4493ED3BC278378 /* native */, |
| + DE837616244AC05206658192 /* Packages */, |
| + 462A9AF15F4A859BC1F3D6CA /* Sources */, |
| + BAD10FDBF936868292CD1359 /* Tests */, |
| + 8EF1EE70527380231F68CB59 /* UITests */, |
| + 26FB571E7AEE92B53C942D4A /* Products */, |
| + ); |
| + sourceTree = "<group>"; |
| + }; |
| + DE837616244AC05206658192 /* Packages */ = { |
| + isa = PBXGroup; |
| + children = ( |
| + 44A4B123A90219B181715E11 /* apple */, |
| + ); |
| + name = Packages; |
| + sourceTree = "<group>"; |
| + }; |
| +/* End PBXGroup section */ |
| + |
| +/* Begin PBXNativeTarget section */ |
| + 3E5F723EFC48342C4FAA88ED /* CallsPhone */ = { |
| + isa = PBXNativeTarget; |
| + buildConfigurationList = FC2C43F47DF7828E72AD1D96 /* Build configuration list for PBXNativeTarget "CallsPhone" */; |
| + buildPhases = ( |
| + 4A80E1461962DD8DFD6F70B0 /* Sources */, |
| + 2E8B617E20239841D454648C /* Resources */, |
| + 52B69C8ED02DD5290E5725B8 /* Frameworks */, |
| + ); |
| + buildRules = ( |
| + ); |
| + dependencies = ( |
| + ); |
| + name = CallsPhone; |
| + packageProductDependencies = ( |
| + 9EB26E9DC9CC7C30FA3F52A1 /* CallsKit */, |
| + ); |
| + productName = CallsPhone; |
| + productReference = 1EEC6AEF623DBA0B1C37B273 /* CallsPhone.app */; |
| + productType = "com.apple.product-type.application"; |
| + }; |
| + AFF040F717512A5B38A50C46 /* CallsPhoneTests */ = { |
| + isa = PBXNativeTarget; |
| + buildConfigurationList = 7F716FD58C0965950052D217 /* Build configuration list for PBXNativeTarget "CallsPhoneTests" */; |
| + buildPhases = ( |
| + 68E66F1C1294F6D7E48BBACA /* Sources */, |
| + 54925C70240D54E0EA2BFC81 /* Frameworks */, |
| + ); |
| + buildRules = ( |
| + ); |
| + dependencies = ( |
| + E1DB6B436201324D94747A74 /* PBXTargetDependency */, |
| + ); |
| + name = CallsPhoneTests; |
| + packageProductDependencies = ( |
| + 37AECACF92E2D38E016985D7 /* CallsKit */, |
| + ); |
| + productName = CallsPhoneTests; |
| + productReference = DF5962C9FB8AAAE3D274F9B4 /* CallsPhoneTests.xctest */; |
| + productType = "com.apple.product-type.bundle.unit-test"; |
| + }; |
| + EC992E1754394A505DD26189 /* CallsPhoneUITests */ = { |
| + isa = PBXNativeTarget; |
| + buildConfigurationList = DD6CE673E0CE1BFE6F5F628C /* Build configuration list for PBXNativeTarget "CallsPhoneUITests" */; |
| + buildPhases = ( |
| + 8223DBFCB79E252B4BD90579 /* Sources */, |
| + ); |
| + buildRules = ( |
| + ); |
| + dependencies = ( |
| + 50AEB777031F97691185C799 /* PBXTargetDependency */, |
| + ); |
| + name = CallsPhoneUITests; |
| + packageProductDependencies = ( |
| + ); |
| + productName = CallsPhoneUITests; |
| + productReference = 238D6419A15E3D9FEEE1B95D /* CallsPhoneUITests.xctest */; |
| + productType = "com.apple.product-type.bundle.ui-testing"; |
| + }; |
| +/* End PBXNativeTarget section */ |
| + |
| +/* Begin PBXProject section */ |
| + 682FB0E7F101580A0D656294 /* Project object */ = { |
| + isa = PBXProject; |
| + attributes = { |
| + BuildIndependentTargetsInParallel = YES; |
| + LastUpgradeCheck = 1430; |
| + TargetAttributes = { |
| + 3E5F723EFC48342C4FAA88ED = { |
| + ProvisioningStyle = Automatic; |
| + }; |
| + AFF040F717512A5B38A50C46 = { |
| + ProvisioningStyle = Automatic; |
| + }; |
| + EC992E1754394A505DD26189 = { |
| + ProvisioningStyle = Automatic; |
| + TestTargetID = 3E5F723EFC48342C4FAA88ED; |
| + }; |
| + }; |
| + }; |
| + buildConfigurationList = 4D80D516BAF03CA132927A02 /* Build configuration list for PBXProject "CallsPhone" */; |
| + developmentRegion = en; |
| + hasScannedForEncodings = 0; |
| + knownRegions = ( |
| + Base, |
| + en, |
| + ); |
| + mainGroup = BC282AA18B3E496243985A97; |
| + minimizedProjectReferenceProxies = 1; |
| + packageReferences = ( |
| + B9A41AD550F2DA156ECF6F03 /* XCLocalSwiftPackageReference "../apple" */, |
| + ); |
| + preferredProjectObjectVersion = 77; |
| + productRefGroup = 26FB571E7AEE92B53C942D4A /* Products */; |
| + projectDirPath = ""; |
| + projectRoot = ""; |
| + targets = ( |
| + 3E5F723EFC48342C4FAA88ED /* CallsPhone */, |
| + AFF040F717512A5B38A50C46 /* CallsPhoneTests */, |
| + EC992E1754394A505DD26189 /* CallsPhoneUITests */, |
| + ); |
| + }; |
| +/* End PBXProject section */ |
| + |
| +/* Begin PBXResourcesBuildPhase section */ |
| + 2E8B617E20239841D454648C /* Resources */ = { |
| + isa = PBXResourcesBuildPhase; |
| + buildActionMask = 2147483647; |
| + files = ( |
| + CE43A3BDCA1021ADDA819A7C /* Assets.xcassets in Resources */, |
| + F7CBB8632BD4A093EBF647EC /* LICENSE.lucide in Resources */, |
| + ); |
| + runOnlyForDeploymentPostprocessing = 0; |
| + }; |
| +/* End PBXResourcesBuildPhase section */ |
| + |
| +/* Begin PBXSourcesBuildPhase section */ |
| + 4A80E1461962DD8DFD6F70B0 /* Sources */ = { |
| + isa = PBXSourcesBuildPhase; |
| + buildActionMask = 2147483647; |
| + files = ( |
| + 73E411583065A93EA9D0C587 /* CallsPhone.swift in Sources */, |
| + ); |
| + runOnlyForDeploymentPostprocessing = 0; |
| + }; |
| + 68E66F1C1294F6D7E48BBACA /* Sources */ = { |
| + isa = PBXSourcesBuildPhase; |
| + buildActionMask = 2147483647; |
| + files = ( |
| + C4CD8034FD096787E6D5AC15 /* CallsPhoneTests.swift in Sources */, |
| + 38C4255DE6ABF3B193EB7F8B /* SilentAudioDevice.swift in Sources */, |
| + AB79422E2C8D346FE897EB8E /* SyntheticVideo.swift in Sources */, |
| + ); |
| + runOnlyForDeploymentPostprocessing = 0; |
| + }; |
| + 8223DBFCB79E252B4BD90579 /* Sources */ = { |
| + isa = PBXSourcesBuildPhase; |
| + buildActionMask = 2147483647; |
| + files = ( |
| + 7BFBBC51165D509308EC8160 /* CallsPhoneUITests.swift in Sources */, |
| + ); |
| + runOnlyForDeploymentPostprocessing = 0; |
| + }; |
| +/* End PBXSourcesBuildPhase section */ |
| + |
| +/* Begin PBXTargetDependency section */ |
| + 50AEB777031F97691185C799 /* PBXTargetDependency */ = { |
| + isa = PBXTargetDependency; |
| + target = 3E5F723EFC48342C4FAA88ED /* CallsPhone */; |
| + targetProxy = 00039816D569E71434A031AC /* PBXContainerItemProxy */; |
| + }; |
| + E1DB6B436201324D94747A74 /* PBXTargetDependency */ = { |
| + isa = PBXTargetDependency; |
| + target = 3E5F723EFC48342C4FAA88ED /* CallsPhone */; |
| + targetProxy = 25103338B684DC807606221F /* PBXContainerItemProxy */; |
| + }; |
| +/* End PBXTargetDependency section */ |
| + |
| +/* Begin XCBuildConfiguration section */ |
| + 03FA789D16936B6CE07006A6 /* Debug */ = { |
| + isa = XCBuildConfiguration; |
| + buildSettings = { |
| + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; |
| + CODE_SIGN_IDENTITY = "iPhone Developer"; |
| + GENERATE_INFOPLIST_FILE = YES; |
| + INFOPLIST_KEY_CFBundleDisplayName = Calls; |
| + INFOPLIST_KEY_NSCameraUsageDescription = "Calls uses your camera so people in your meeting can see you."; |
| + INFOPLIST_KEY_NSMicrophoneUsageDescription = "Calls uses your microphone so people in your meeting can hear you."; |
| + INFOPLIST_KEY_UILaunchScreen_Generation = YES; |
| + INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortraitUpsideDown"; |
| + LD_RUNPATH_SEARCH_PATHS = ( |
| + "$(inherited)", |
| + "@executable_path/Frameworks", |
| + ); |
| + PRODUCT_BUNDLE_IDENTIFIER = net.amadan.oficina.calls.ios; |
| + SDKROOT = iphoneos; |
| + TARGETED_DEVICE_FAMILY = "1,2"; |
| + }; |
| + name = Debug; |
| + }; |
| + 33CDD886BBDCE0974002B7EF /* Debug */ = { |
| + isa = XCBuildConfiguration; |
| + buildSettings = { |
| + ALWAYS_SEARCH_USER_PATHS = NO; |
| + CLANG_ANALYZER_NONNULL = YES; |
| + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; |
| + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; |
| + CLANG_CXX_LIBRARY = "libc++"; |
| + CLANG_ENABLE_MODULES = YES; |
| + CLANG_ENABLE_OBJC_ARC = YES; |
| + CLANG_ENABLE_OBJC_WEAK = YES; |
| + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; |
| + CLANG_WARN_BOOL_CONVERSION = YES; |
| + CLANG_WARN_COMMA = YES; |
| + CLANG_WARN_CONSTANT_CONVERSION = YES; |
| + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; |
| + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; |
| + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; |
| + CLANG_WARN_EMPTY_BODY = YES; |
| + CLANG_WARN_ENUM_CONVERSION = YES; |
| + CLANG_WARN_INFINITE_RECURSION = YES; |
| + CLANG_WARN_INT_CONVERSION = YES; |
| + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; |
| + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; |
| + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; |
| + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; |
| + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; |
| + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; |
| + CLANG_WARN_STRICT_PROTOTYPES = YES; |
| + CLANG_WARN_SUSPICIOUS_MOVE = YES; |
| + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; |
| + CLANG_WARN_UNREACHABLE_CODE = YES; |
| + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; |
| + CODE_SIGN_STYLE = Automatic; |
| + COPY_PHASE_STRIP = NO; |
| + CURRENT_PROJECT_VERSION = 1; |
| + DEBUG_INFORMATION_FORMAT = dwarf; |
| + ENABLE_STRICT_OBJC_MSGSEND = YES; |
| + ENABLE_TESTABILITY = YES; |
| + GCC_C_LANGUAGE_STANDARD = gnu11; |
| + GCC_DYNAMIC_NO_PIC = NO; |
| + GCC_NO_COMMON_BLOCKS = YES; |
| + GCC_OPTIMIZATION_LEVEL = 0; |
| + GCC_PREPROCESSOR_DEFINITIONS = ( |
| + "$(inherited)", |
| + "DEBUG=1", |
| + ); |
| + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; |
| + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; |
| + GCC_WARN_UNDECLARED_SELECTOR = YES; |
| + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; |
| + GCC_WARN_UNUSED_FUNCTION = YES; |
| + GCC_WARN_UNUSED_VARIABLE = YES; |
| + IPHONEOS_DEPLOYMENT_TARGET = 17.0; |
| + MARKETING_VERSION = 0.2.0; |
| + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; |
| + MTL_FAST_MATH = YES; |
| + ONLY_ACTIVE_ARCH = YES; |
| + PRODUCT_NAME = "$(TARGET_NAME)"; |
| + SDKROOT = iphoneos; |
| + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; |
| + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; |
| + SWIFT_VERSION = 5.0; |
| + }; |
| + name = Debug; |
| + }; |
| + 59133A650C3B8EBED2AA833B /* Debug */ = { |
| + isa = XCBuildConfiguration; |
| + buildSettings = { |
| + BUNDLE_LOADER = "$(TEST_HOST)"; |
| + GENERATE_INFOPLIST_FILE = YES; |
| + LD_RUNPATH_SEARCH_PATHS = ( |
| + "$(inherited)", |
| + "@executable_path/Frameworks", |
| + "@loader_path/Frameworks", |
| + ); |
| + PRODUCT_BUNDLE_IDENTIFIER = net.amadan.oficina.CallsPhoneTests; |
| + SDKROOT = iphoneos; |
| + TARGETED_DEVICE_FAMILY = "1,2"; |
| + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CallsPhone.app/CallsPhone"; |
| + }; |
| + name = Debug; |
| + }; |
| + 5979ADB1B96EDAF37C3F907C /* Release */ = { |
| + isa = XCBuildConfiguration; |
| + buildSettings = { |
| + ALWAYS_SEARCH_USER_PATHS = NO; |
| + CLANG_ANALYZER_NONNULL = YES; |
| + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; |
| + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; |
| + CLANG_CXX_LIBRARY = "libc++"; |
| + CLANG_ENABLE_MODULES = YES; |
| + CLANG_ENABLE_OBJC_ARC = YES; |
| + CLANG_ENABLE_OBJC_WEAK = YES; |
| + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; |
| + CLANG_WARN_BOOL_CONVERSION = YES; |
| + CLANG_WARN_COMMA = YES; |
| + CLANG_WARN_CONSTANT_CONVERSION = YES; |
| + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; |
| + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; |
| + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; |
| + CLANG_WARN_EMPTY_BODY = YES; |
| + CLANG_WARN_ENUM_CONVERSION = YES; |
| + CLANG_WARN_INFINITE_RECURSION = YES; |
| + CLANG_WARN_INT_CONVERSION = YES; |
| + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; |
| + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; |
| + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; |
| + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; |
| + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; |
| + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; |
| + CLANG_WARN_STRICT_PROTOTYPES = YES; |
| + CLANG_WARN_SUSPICIOUS_MOVE = YES; |
| + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; |
| + CLANG_WARN_UNREACHABLE_CODE = YES; |
| + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; |
| + CODE_SIGN_STYLE = Automatic; |
| + COPY_PHASE_STRIP = NO; |
| + CURRENT_PROJECT_VERSION = 1; |
| + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; |
| + ENABLE_NS_ASSERTIONS = NO; |
| + ENABLE_STRICT_OBJC_MSGSEND = YES; |
| + GCC_C_LANGUAGE_STANDARD = gnu11; |
| + GCC_NO_COMMON_BLOCKS = YES; |
| + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; |
| + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; |
| + GCC_WARN_UNDECLARED_SELECTOR = YES; |
| + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; |
| + GCC_WARN_UNUSED_FUNCTION = YES; |
| + GCC_WARN_UNUSED_VARIABLE = YES; |
| + IPHONEOS_DEPLOYMENT_TARGET = 17.0; |
| + MARKETING_VERSION = 0.2.0; |
| + MTL_ENABLE_DEBUG_INFO = NO; |
| + MTL_FAST_MATH = YES; |
| + PRODUCT_NAME = "$(TARGET_NAME)"; |
| + SDKROOT = iphoneos; |
| + SWIFT_COMPILATION_MODE = wholemodule; |
| + SWIFT_OPTIMIZATION_LEVEL = "-O"; |
| + SWIFT_VERSION = 5.0; |
| + }; |
| + name = Release; |
| + }; |
| + 6F87F9E2B5A399B99A5BD23B /* Release */ = { |
| + isa = XCBuildConfiguration; |
| + buildSettings = { |
| + BUNDLE_LOADER = "$(TEST_HOST)"; |
| + GENERATE_INFOPLIST_FILE = YES; |
| + INFOPLIST_FILE = "../build/ios-test-info.plist"; |
| + LD_RUNPATH_SEARCH_PATHS = ( |
| + "$(inherited)", |
| + "@executable_path/Frameworks", |
| + "@loader_path/Frameworks", |
| + ); |
| + PRODUCT_BUNDLE_IDENTIFIER = net.amadan.oficina.CallsPhoneUITests; |
| + SDKROOT = iphoneos; |
| + TARGETED_DEVICE_FAMILY = "1,2"; |
| + TEST_TARGET_NAME = CallsPhone; |
| + }; |
| + name = Release; |
| + }; |
| + 71CA3DB6E1D0771CB9D6E054 /* Debug */ = { |
| + isa = XCBuildConfiguration; |
| + buildSettings = { |
| + BUNDLE_LOADER = "$(TEST_HOST)"; |
| + GENERATE_INFOPLIST_FILE = YES; |
| + INFOPLIST_FILE = "../build/ios-test-info.plist"; |
| + LD_RUNPATH_SEARCH_PATHS = ( |
| + "$(inherited)", |
| + "@executable_path/Frameworks", |
| + "@loader_path/Frameworks", |
| + ); |
| + PRODUCT_BUNDLE_IDENTIFIER = net.amadan.oficina.CallsPhoneUITests; |
| + SDKROOT = iphoneos; |
| + TARGETED_DEVICE_FAMILY = "1,2"; |
| + TEST_TARGET_NAME = CallsPhone; |
| + }; |
| + name = Debug; |
| + }; |
| + 7DBDDEFE31C14BC1B357BE21 /* Release */ = { |
| + isa = XCBuildConfiguration; |
| + buildSettings = { |
| + BUNDLE_LOADER = "$(TEST_HOST)"; |
| + GENERATE_INFOPLIST_FILE = YES; |
| + LD_RUNPATH_SEARCH_PATHS = ( |
| + "$(inherited)", |
| + "@executable_path/Frameworks", |
| + "@loader_path/Frameworks", |
| + ); |
| + PRODUCT_BUNDLE_IDENTIFIER = net.amadan.oficina.CallsPhoneTests; |
| + SDKROOT = iphoneos; |
| + TARGETED_DEVICE_FAMILY = "1,2"; |
| + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CallsPhone.app/CallsPhone"; |
| + }; |
| + name = Release; |
| + }; |
| + 955F709A1C8A67052BA11B31 /* Release */ = { |
| + isa = XCBuildConfiguration; |
| + buildSettings = { |
| + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; |
| + CODE_SIGN_IDENTITY = "iPhone Developer"; |
| + GENERATE_INFOPLIST_FILE = YES; |
| + INFOPLIST_KEY_CFBundleDisplayName = Calls; |
| + INFOPLIST_KEY_NSCameraUsageDescription = "Calls uses your camera so people in your meeting can see you."; |
| + INFOPLIST_KEY_NSMicrophoneUsageDescription = "Calls uses your microphone so people in your meeting can hear you."; |
| + INFOPLIST_KEY_UILaunchScreen_Generation = YES; |
| + INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortraitUpsideDown"; |
| + LD_RUNPATH_SEARCH_PATHS = ( |
| + "$(inherited)", |
| + "@executable_path/Frameworks", |
| + ); |
| + PRODUCT_BUNDLE_IDENTIFIER = net.amadan.oficina.calls.ios; |
| + SDKROOT = iphoneos; |
| + TARGETED_DEVICE_FAMILY = "1,2"; |
| + }; |
| + name = Release; |
| + }; |
| +/* End XCBuildConfiguration section */ |
| + |
| +/* Begin XCConfigurationList section */ |
| + 4D80D516BAF03CA132927A02 /* Build configuration list for PBXProject "CallsPhone" */ = { |
| + isa = XCConfigurationList; |
| + buildConfigurations = ( |
| + 33CDD886BBDCE0974002B7EF /* Debug */, |
| + 5979ADB1B96EDAF37C3F907C /* Release */, |
| + ); |
| + defaultConfigurationIsVisible = 0; |
| + defaultConfigurationName = Debug; |
| + }; |
| + 7F716FD58C0965950052D217 /* Build configuration list for PBXNativeTarget "CallsPhoneTests" */ = { |
| + isa = XCConfigurationList; |
| + buildConfigurations = ( |
| + 59133A650C3B8EBED2AA833B /* Debug */, |
| + 7DBDDEFE31C14BC1B357BE21 /* Release */, |
| + ); |
| + defaultConfigurationIsVisible = 0; |
| + defaultConfigurationName = Debug; |
| + }; |
| + DD6CE673E0CE1BFE6F5F628C /* Build configuration list for PBXNativeTarget "CallsPhoneUITests" */ = { |
| + isa = XCConfigurationList; |
| + buildConfigurations = ( |
| + 71CA3DB6E1D0771CB9D6E054 /* Debug */, |
| + 6F87F9E2B5A399B99A5BD23B /* Release */, |
| + ); |
| + defaultConfigurationIsVisible = 0; |
| + defaultConfigurationName = Debug; |
| + }; |
| + FC2C43F47DF7828E72AD1D96 /* Build configuration list for PBXNativeTarget "CallsPhone" */ = { |
| + isa = XCConfigurationList; |
| + buildConfigurations = ( |
| + 03FA789D16936B6CE07006A6 /* Debug */, |
| + 955F709A1C8A67052BA11B31 /* Release */, |
| + ); |
| + defaultConfigurationIsVisible = 0; |
| + defaultConfigurationName = Debug; |
| + }; |
| +/* End XCConfigurationList section */ |
| + |
| +/* Begin XCLocalSwiftPackageReference section */ |
| + B9A41AD550F2DA156ECF6F03 /* XCLocalSwiftPackageReference "../apple" */ = { |
| + isa = XCLocalSwiftPackageReference; |
| + relativePath = ../apple; |
| + }; |
| +/* End XCLocalSwiftPackageReference section */ |
| + |
| +/* Begin XCSwiftPackageProductDependency section */ |
| + 37AECACF92E2D38E016985D7 /* CallsKit */ = { |
| + isa = XCSwiftPackageProductDependency; |
| + productName = CallsKit; |
| + }; |
| + 9EB26E9DC9CC7C30FA3F52A1 /* CallsKit */ = { |
| + isa = XCSwiftPackageProductDependency; |
| + productName = CallsKit; |
| + }; |
| +/* End XCSwiftPackageProductDependency section */ |
| + }; |
| + rootObject = 682FB0E7F101580A0D656294 /* Project object */; |
| +} |
diff --git a/native/ios/CallsPhone.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/native/ios/CallsPhone.xcodeproj/project.xcworkspace/contents.xcworkspacedata| new file mode 100644 |
| index 0000000..919434a |
| --- /dev/null |
| +++ b/native/ios/CallsPhone.xcodeproj/project.xcworkspace/contents.xcworkspacedata |
| @@ -0,0 +1,7 @@ |
| +<?xml version="1.0" encoding="UTF-8"?> |
| +<Workspace |
| + version = "1.0"> |
| + <FileRef |
| + location = "self:"> |
| + </FileRef> |
| +</Workspace> |
diff --git a/native/ios/CallsPhone.xcodeproj/xcshareddata/xcschemes/CallsPhone.xcscheme b/native/ios/CallsPhone.xcodeproj/xcshareddata/xcschemes/CallsPhone.xcscheme| new file mode 100644 |
| index 0000000..9a0c5c0 |
| --- /dev/null |
| +++ b/native/ios/CallsPhone.xcodeproj/xcshareddata/xcschemes/CallsPhone.xcscheme |
| @@ -0,0 +1,113 @@ |
| +<?xml version="1.0" encoding="UTF-8"?> |
| +<Scheme |
| + LastUpgradeVersion = "1430" |
| + version = "1.7"> |
| + <BuildAction |
| + parallelizeBuildables = "YES" |
| + buildImplicitDependencies = "YES" |
| + runPostActionsOnFailure = "NO"> |
| + <BuildActionEntries> |
| + <BuildActionEntry |
| + buildForTesting = "YES" |
| + buildForRunning = "YES" |
| + buildForProfiling = "YES" |
| + buildForArchiving = "YES" |
| + buildForAnalyzing = "YES"> |
| + <BuildableReference |
| + BuildableIdentifier = "primary" |
| + BlueprintIdentifier = "3E5F723EFC48342C4FAA88ED" |
| + BuildableName = "CallsPhone.app" |
| + BlueprintName = "CallsPhone" |
| + ReferencedContainer = "container:CallsPhone.xcodeproj"> |
| + </BuildableReference> |
| + </BuildActionEntry> |
| + </BuildActionEntries> |
| + </BuildAction> |
| + <TestAction |
| + buildConfiguration = "Debug" |
| + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
| + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
| + shouldUseLaunchSchemeArgsEnv = "YES" |
| + onlyGenerateCoverageForSpecifiedTargets = "NO"> |
| + <MacroExpansion> |
| + <BuildableReference |
| + BuildableIdentifier = "primary" |
| + BlueprintIdentifier = "3E5F723EFC48342C4FAA88ED" |
| + BuildableName = "CallsPhone.app" |
| + BlueprintName = "CallsPhone" |
| + ReferencedContainer = "container:CallsPhone.xcodeproj"> |
| + </BuildableReference> |
| + </MacroExpansion> |
| + <Testables> |
| + <TestableReference |
| + skipped = "NO" |
| + parallelizable = "NO"> |
| + <BuildableReference |
| + BuildableIdentifier = "primary" |
| + BlueprintIdentifier = "EC992E1754394A505DD26189" |
| + BuildableName = "CallsPhoneUITests.xctest" |
| + BlueprintName = "CallsPhoneUITests" |
| + ReferencedContainer = "container:CallsPhone.xcodeproj"> |
| + </BuildableReference> |
| + </TestableReference> |
| + <TestableReference |
| + skipped = "NO" |
| + parallelizable = "NO"> |
| + <BuildableReference |
| + BuildableIdentifier = "primary" |
| + BlueprintIdentifier = "AFF040F717512A5B38A50C46" |
| + BuildableName = "CallsPhoneTests.xctest" |
| + BlueprintName = "CallsPhoneTests" |
| + ReferencedContainer = "container:CallsPhone.xcodeproj"> |
| + </BuildableReference> |
| + </TestableReference> |
| + </Testables> |
| + <CommandLineArguments> |
| + </CommandLineArguments> |
| + </TestAction> |
| + <LaunchAction |
| + buildConfiguration = "Debug" |
| + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
| + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
| + launchStyle = "0" |
| + useCustomWorkingDirectory = "NO" |
| + ignoresPersistentStateOnLaunch = "NO" |
| + debugDocumentVersioning = "YES" |
| + debugServiceExtension = "internal" |
| + allowLocationSimulation = "YES"> |
| + <BuildableProductRunnable |
| + runnableDebuggingMode = "0"> |
| + <BuildableReference |
| + BuildableIdentifier = "primary" |
| + BlueprintIdentifier = "3E5F723EFC48342C4FAA88ED" |
| + BuildableName = "CallsPhone.app" |
| + BlueprintName = "CallsPhone" |
| + ReferencedContainer = "container:CallsPhone.xcodeproj"> |
| + </BuildableReference> |
| + </BuildableProductRunnable> |
| + </LaunchAction> |
| + <ProfileAction |
| + buildConfiguration = "Release" |
| + shouldUseLaunchSchemeArgsEnv = "YES" |
| + savedToolIdentifier = "" |
| + useCustomWorkingDirectory = "NO" |
| + debugDocumentVersioning = "YES"> |
| + <BuildableProductRunnable |
| + runnableDebuggingMode = "0"> |
| + <BuildableReference |
| + BuildableIdentifier = "primary" |
| + BlueprintIdentifier = "3E5F723EFC48342C4FAA88ED" |
| + BuildableName = "CallsPhone.app" |
| + BlueprintName = "CallsPhone" |
| + ReferencedContainer = "container:CallsPhone.xcodeproj"> |
| + </BuildableReference> |
| + </BuildableProductRunnable> |
| + </ProfileAction> |
| + <AnalyzeAction |
| + buildConfiguration = "Debug"> |
| + </AnalyzeAction> |
| + <ArchiveAction |
| + buildConfiguration = "Release" |
| + revealArchiveInOrganizer = "YES"> |
| + </ArchiveAction> |
| +</Scheme> |
diff --git a/native/ios/README.md b/native/ios/README.md| index aec898e..2cedca4 100644 |
| --- a/native/ios/README.md |
| +++ b/native/ios/README.md |
| @@ -1,7 +1,7 @@ |
| -# Meet for iPhone |
| +# Calls for iPhone |
| A SwiftUI iOS 17+ app using the same Go authentication/signaling core and native |
| -WebRTC engine as Meet for Mac. No embedded webview is used. The Xcode project is |
| +WebRTC engine as Calls for Mac. No embedded webview is used. The Xcode project is |
| generated from `project.yml`; edit that specification and the Swift sources. |
| ## Build |
| @@ -15,8 +15,8 @@ make iphone |
| CALLS_DEVELOPMENT_TEAM=YOUR_TEAM_ID make iphone-device |
| ``` |
| -Build products are `native/build/ios-simulator/Build/Products/Debug-iphonesimulator/MeetPhone.app` |
| -and `native/build/ios-device/Build/Products/Debug-iphoneos/MeetPhone.app`. |
| +Build products are `native/build/ios-simulator/Build/Products/Debug-iphonesimulator/CallsPhone.app` |
| +and `native/build/ios-device/Build/Products/Debug-iphoneos/CallsPhone.app`. |
| The device build uses automatic development signing with your selected team; it |
| does not upload an app to App Store Connect or TestFlight. |
| @@ -24,7 +24,7 @@ Generate/open the Xcode project for normal device development: |
| ```sh |
| xcodegen generate --spec native/ios/project.yml |
| -open native/ios/MeetPhone.xcodeproj |
| +open native/ios/CallsPhone.xcodeproj |
| ``` |
| Select your development team and connected iPhone, then Run. Alternatively, |
| @@ -35,8 +35,8 @@ available to Xcode, with Developer Mode enabled. |
| ## First phone milestone |
| - Paste a meeting or invitation link; sign in in Safari/the default browser. |
| -- Open the email link normally, compare the browser's code with Meet's code, |
| - approve, then return to Meet. Credentials are kept in memory. |
| +- Open the email link normally, compare the browser's code with Calls's code, |
| + approve, then return to Calls. Credentials are kept in memory. |
| - Join using the front camera and microphone; the local video display is mirrored. |
| Sent video and remote video retain their original orientation. |
| - Native remote video, microphone/camera controls, guest admission, chat, and leave. |
diff --git a/native/ios/Sources/MeetPhone.swift b/native/ios/Sources/CallsPhone.swift| similarity index 95% |
| rename from native/ios/Sources/MeetPhone.swift |
| rename to native/ios/Sources/CallsPhone.swift |
| index adf6cdb..ea0a76c 100644 |
| --- a/native/ios/Sources/MeetPhone.swift |
| +++ b/native/ios/Sources/CallsPhone.swift |
| @@ -1,9 +1,9 @@ |
| -import MeetKit |
| +import CallsKit |
| import SwiftUI |
| import WebRTC |
| -@main struct MeetPhoneApp: App { |
| - @StateObject private var model = MeetModel() |
| +@main struct CallsPhoneApp: App { |
| + @StateObject private var model = CallsModel() |
| @Environment(\.scenePhase) private var scenePhase |
| var body: some Scene { |
| WindowGroup { |
| @@ -22,16 +22,16 @@ import WebRTC |
| } |
| struct PhoneHome: View { |
| - @ObservedObject var model: MeetModel |
| + @ObservedObject var model: CallsModel |
| var body: some View { |
| NavigationStack { |
| Group { |
| if model.joining { |
| PhoneCall(call: model.call, leave: model.leave) |
| } else { |
| - MeetLobby(model: model) |
| + CallsLobby(model: model) |
| } |
| - }.tint(MeetAppearance.accent).navigationTitle("Meet").navigationBarTitleDisplayMode(.inline) |
| + }.tint(CallsAppearance.accent).navigationTitle("Calls").navigationBarTitleDisplayMode(.inline) |
| } |
| } |
| } |
| @@ -106,7 +106,7 @@ struct PhoneCall: View { |
| description: Text("Others will appear here when they join.") |
| ) |
| .frame(maxWidth: .infinity, maxHeight: .infinity) |
| - .background(MeetAppearance.background, in: RoundedRectangle(cornerRadius: 18)) |
| + .background(CallsAppearance.background, in: RoundedRectangle(cornerRadius: 18)) |
| } |
| PhoneVideoTile( |
| track: call.localTrack, label: "You", mirrored: true, cameraOff: call.cameraOff |
| @@ -140,7 +140,7 @@ struct PhoneCall: View { |
| ) { call.mute() } |
| .buttonStyle( |
| CallActionStyle( |
| - color: call.muted ? Color(red: 0.65, green: 0.30, blue: 0.02) : MeetAppearance.accent, |
| + color: call.muted ? Color(red: 0.65, green: 0.30, blue: 0.02) : CallsAppearance.accent, |
| emphasized: call.muted)) |
| Button( |
| call.cameraOff ? "Turn camera on" : "Turn camera off", |
diff --git a/native/ios/Tests/MeetPhoneTests.swift b/native/ios/Tests/CallsPhoneTests.swift| similarity index 97% |
| rename from native/ios/Tests/MeetPhoneTests.swift |
| rename to native/ios/Tests/CallsPhoneTests.swift |
| index 66aacd8..2e9e28a 100644 |
| --- a/native/ios/Tests/MeetPhoneTests.swift |
| +++ b/native/ios/Tests/CallsPhoneTests.swift |
| @@ -1,8 +1,8 @@ |
| -import MeetKit |
| +import CallsKit |
| import WebRTC |
| import XCTest |
| -final class MeetPhoneTests: XCTestCase { |
| +final class CallsPhoneTests: XCTestCase { |
| @MainActor func testNativeVideoAndRenewal() async throws { |
| guard let text = ProcessInfo.processInfo.environment["CALLS_TEST_MEDIA"], |
| let data = text.data(using: .utf8) |
diff --git a/native/ios/UITests/MeetPhoneUITests.swift b/native/ios/UITests/CallsPhoneUITests.swift| similarity index 96% |
| rename from native/ios/UITests/MeetPhoneUITests.swift |
| rename to native/ios/UITests/CallsPhoneUITests.swift |
| index 9e57be2..70bcb31 100644 |
| --- a/native/ios/UITests/MeetPhoneUITests.swift |
| +++ b/native/ios/UITests/CallsPhoneUITests.swift |
| @@ -1,6 +1,6 @@ |
| import XCTest |
| -final class MeetPhoneUITests: XCTestCase { |
| +final class CallsPhoneUITests: XCTestCase { |
| @MainActor func testInvalidMeetingLink() { |
| let app = XCUIApplication() |
| app.launch() |
| @@ -52,7 +52,7 @@ final class MeetPhoneUITests: XCTestCase { |
| } |
| let verification = try XCTUnwrap(link) |
| XCUIDevice.shared.system.open(verification) |
| - let approve = safari.buttons["Sign in to Meet app"] |
| + let approve = safari.buttons["Sign in to Calls app"] |
| XCTAssertTrue(approve.waitForExistence(timeout: 20)) |
| app.activate() |
| let code = app.staticTexts.matching( |
diff --git a/native/ios/project.yml b/native/ios/project.yml| index 9288c26..7d6e56d 100644 |
| --- a/native/ios/project.yml |
| +++ b/native/ios/project.yml |
| @@ -1,10 +1,10 @@ |
| -name: MeetPhone |
| +name: CallsPhone |
| options: |
| bundleIdPrefix: net.amadan.oficina |
| deploymentTarget: |
| iOS: '17.0' |
| packages: |
| - MeetNative: |
| + CallsNative: |
| path: ../apple |
| settings: |
| base: |
| @@ -13,7 +13,7 @@ settings: |
| MARKETING_VERSION: '0.2.0' |
| CURRENT_PROJECT_VERSION: '1' |
| targets: |
| - MeetPhone: |
| + CallsPhone: |
| type: application |
| platform: iOS |
| sources: |
| @@ -22,51 +22,51 @@ targets: |
| - path: ../LICENSE.lucide |
| buildPhase: resources |
| dependencies: |
| - - package: MeetNative |
| - product: MeetKit |
| + - package: CallsNative |
| + product: CallsKit |
| settings: |
| base: |
| ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon |
| - PRODUCT_BUNDLE_IDENTIFIER: net.amadan.oficina.meet.ios |
| + PRODUCT_BUNDLE_IDENTIFIER: net.amadan.oficina.calls.ios |
| TARGETED_DEVICE_FAMILY: '1,2' |
| GENERATE_INFOPLIST_FILE: YES |
| - INFOPLIST_KEY_CFBundleDisplayName: Meet |
| - INFOPLIST_KEY_NSCameraUsageDescription: Meet uses your camera so people in your meeting can see you. |
| - INFOPLIST_KEY_NSMicrophoneUsageDescription: Meet uses your microphone so people in your meeting can hear you. |
| + INFOPLIST_KEY_CFBundleDisplayName: Calls |
| + INFOPLIST_KEY_NSCameraUsageDescription: Calls uses your camera so people in your meeting can see you. |
| + INFOPLIST_KEY_NSMicrophoneUsageDescription: Calls uses your microphone so people in your meeting can hear you. |
| INFOPLIST_KEY_UILaunchScreen_Generation: YES |
| INFOPLIST_KEY_UISupportedInterfaceOrientations: UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortraitUpsideDown |
| - MeetPhoneTests: |
| + CallsPhoneTests: |
| type: bundle.unit-test |
| platform: iOS |
| sources: |
| - Tests |
| - - ../apple/Sources/MeetInterop/SyntheticVideo.swift |
| + - ../apple/Sources/CallsInterop/SyntheticVideo.swift |
| dependencies: |
| - - target: MeetPhone |
| - - package: MeetNative |
| - product: MeetKit |
| + - target: CallsPhone |
| + - package: CallsNative |
| + product: CallsKit |
| settings: |
| base: |
| GENERATE_INFOPLIST_FILE: YES |
| - MeetPhoneUITests: |
| + CallsPhoneUITests: |
| type: bundle.ui-testing |
| platform: iOS |
| sources: [UITests] |
| dependencies: |
| - - target: MeetPhone |
| + - target: CallsPhone |
| settings: |
| base: |
| GENERATE_INFOPLIST_FILE: YES |
| - TEST_TARGET_NAME: MeetPhone |
| + TEST_TARGET_NAME: CallsPhone |
| info: |
| path: ../build/ios-test-info.plist |
| properties: |
| NSAppTransportSecurity: |
| NSAllowsArbitraryLoads: true |
| schemes: |
| - MeetPhone: |
| + CallsPhone: |
| build: |
| targets: |
| - MeetPhone: all |
| + CallsPhone: all |
| test: |
| - targets: [MeetPhoneUITests, MeetPhoneTests] |
| + targets: [CallsPhoneUITests, CallsPhoneTests] |
diff --git a/native/scripts/build-bridge.sh b/native/scripts/build-bridge.sh| index 3f462ca..96ea832 100755 |
| --- a/native/scripts/build-bridge.sh |
| +++ b/native/scripts/build-bridge.sh |
| @@ -4,4 +4,4 @@ cd "$(dirname "$0")/.." |
| export GOPRIVATE="${GOPRIVATE:+$GOPRIVATE,}amadan.net" |
| mkdir -p build/bin |
| CGO_ENABLED=0 GOBIN="$PWD/build/bin" go install golang.org/x/mobile/cmd/gomobile golang.org/x/mobile/cmd/gobind |
| -PATH="$PWD/build/bin:$PATH" gomobile bind -target=macos,ios,iossimulator -macosversion=14.0 -iosversion=17.0 -o build/MeetBridge.xcframework ./bridge |
| +PATH="$PWD/build/bin:$PATH" gomobile bind -target=macos,ios,iossimulator -macosversion=14.0 -iosversion=17.0 -o build/CallsBridge.xcframework ./bridge |
diff --git a/native/scripts/build-iphone.sh b/native/scripts/build-iphone.sh| index 4043bde..3de8608 100755 |
| --- a/native/scripts/build-iphone.sh |
| +++ b/native/scripts/build-iphone.sh |
| @@ -5,13 +5,13 @@ cd "$(dirname "$0")/.." |
| xcodegen generate --spec ios/project.yml |
| case "${1:-simulator}" in |
| simulator) |
| - xcodebuild -project ios/MeetPhone.xcodeproj -scheme MeetPhone \ |
| + xcodebuild -project ios/CallsPhone.xcodeproj -scheme CallsPhone \ |
| -destination 'generic/platform=iOS Simulator' -derivedDataPath build/ios-simulator \ |
| CODE_SIGNING_ALLOWED=NO build |
| ;; |
| device) |
| : "${CALLS_DEVELOPMENT_TEAM:?Set CALLS_DEVELOPMENT_TEAM to your Apple development team ID}" |
| - xcodebuild -project ios/MeetPhone.xcodeproj -scheme MeetPhone \ |
| + xcodebuild -project ios/CallsPhone.xcodeproj -scheme CallsPhone \ |
| -destination 'generic/platform=iOS' -derivedDataPath build/ios-device \ |
| "DEVELOPMENT_TEAM=$CALLS_DEVELOPMENT_TEAM" -allowProvisioningUpdates build |
| ;; |
diff --git a/native/scripts/build-mac.sh b/native/scripts/build-mac.sh| index 841baed..0e9ad65 100755 |
| --- a/native/scripts/build-mac.sh |
| +++ b/native/scripts/build-mac.sh |
| @@ -5,5 +5,5 @@ cd "$(dirname "$0")/.." |
| swift scripts/generate-mac-icon.swift |
| swift build --package-path apple |
| python3 scripts/bundle-mac.py |
| -codesign --force --deep --sign - build/Meet.app |
| -printf 'Built %s/build/Meet.app\n' "$PWD" |
| +codesign --force --deep --sign - build/Calls.app |
| +printf 'Built %s/build/Calls.app\n' "$PWD" |
diff --git a/native/scripts/bundle-mac.py b/native/scripts/bundle-mac.py| index 52d2e6f..792c307 100644 |
| --- a/native/scripts/bundle-mac.py |
| +++ b/native/scripts/bundle-mac.py |
| @@ -28,7 +28,7 @@ subprocess.run(['iconutil', '-c', 'icns', str(iconset), '-o', |
| str(bundle / 'Resources/MeetMac.icns')], check=True) |
| info = { |
| 'CFBundleName': 'Meet', 'CFBundleDisplayName': 'Meet', |
| - 'CFBundleIdentifier': 'net.amadan.oficina.meet', |
| + 'CFBundleIdentifier': 'net.amadan.oficina.calls', |
| 'CFBundleExecutable': 'MeetMac', 'CFBundlePackageType': 'APPL', |
| 'CFBundleIconFile': 'MeetMac.icns', |
| 'CFBundleShortVersionString': '0.1.0', 'CFBundleVersion': '1', |
diff --git a/native/scripts/generate-mac-icon.swift b/native/scripts/generate-mac-icon.swift| index 37de2dc..ff8c7c4 100644 |
| --- a/native/scripts/generate-mac-icon.swift |
| +++ b/native/scripts/generate-mac-icon.swift |
| @@ -4,13 +4,13 @@ import AppKit |
| // Keep the approved square master intact and derive a padded Mac icon from it. |
| let native = URL(fileURLWithPath: #filePath).standardizedFileURL |
| .deletingLastPathComponent().deletingLastPathComponent() |
| -let resources = native.appendingPathComponent("apple/Sources/MeetMac/Resources") |
| +let resources = native.appendingPathComponent("apple/Sources/CallsMac/Resources") |
| guard let source = NSImage(contentsOf: resources.appendingPathComponent("AppIcon.png")), |
| let bitmap = NSBitmapImageRep(bitmapDataPlanes: nil, pixelsWide: 1024, pixelsHigh: 1024, |
| bitsPerSample: 8, samplesPerPixel: 4, hasAlpha: true, isPlanar: false, |
| colorSpaceName: .deviceRGB, bytesPerRow: 0, bitsPerPixel: 0), |
| let context = NSGraphicsContext(bitmapImageRep: bitmap) |
| -else { fatalError("Cannot load or render Meet's icon") } |
| +else { fatalError("Cannot load or render Calls's icon") } |
| NSGraphicsContext.saveGraphicsState() |
| NSGraphicsContext.current = context |
| context.imageInterpolation = .high |
| @@ -19,6 +19,6 @@ NSBezierPath(roundedRect: tile, xRadius: 184, yRadius: 184).addClip() |
| source.draw(in: tile, from: .zero, operation: .copy, fraction: 1) |
| NSGraphicsContext.restoreGraphicsState() |
| guard let png = bitmap.representation(using: .png, properties: [:]) else { |
| - fatalError("Cannot encode Meet's icon") |
| + fatalError("Cannot encode Calls's icon") |
| } |
| try png.write(to: resources.appendingPathComponent("MacIcon.png")) |
diff --git a/protocol/messages.go b/protocol/messages.go| index 84a840a..cbb5670 100644 |
| --- a/protocol/messages.go |
| +++ b/protocol/messages.go |
| @@ -1,4 +1,4 @@ |
| -// Package protocol defines Meet’s client-neutral signaling contract. |
| +// Package protocol defines Calls’s client-neutral signaling contract. |
| package protocol |
| import "encoding/json" |
diff --git a/test/browser/call.mjs b/test/browser/call.mjs| index a1afdda..23f3f4c 100644 |
| --- a/test/browser/call.mjs |
| +++ b/test/browser/call.mjs |
| @@ -720,7 +720,7 @@ async function biteCut(cut, ms = 20000) { |
| // of them, and they mean different things — one says this browser cannot |
| // reach the relay at all, the other that one connection's credential ran |
| // out before a new one landed. |
| -const ICE_WARNING = 'Meet could not reach the relay. Calls may not connect until it can.'; |
| +const ICE_WARNING = 'Calls could not reach the relay. Calls may not connect until it can.'; |
| const ICE_EXPIRED = 'The relay credential expired for this connection.'; |
| const ICE_STUCK = 'Could not renew this connection through the relay.'; |
| @@ -2126,7 +2126,7 @@ const run = { |
| // §5.3 steps 1 and 3, the unhappy half: the list is fetched once and |
| // every fetch after that is refused. A is told, in a sentence, that |
| - // Meet cannot reach the relay; when the old credential's own deadline |
| + // Calls cannot reach the relay; when the old credential's own deadline |
| // passes with nothing renewed, the connection that was built on it |
| // says so too — and through all of it the call stays up, because on |
| // this network the relay was never load-bearing. |
| @@ -3538,7 +3538,7 @@ const run = { |
| const ended = await until(async () => ((await state(page)).terminal === 'unreachable' ? true : false), 130000); |
| check(ended, 'a refusal the probe cannot name stops rather than retrying for ever — ' + |
| (await diagnose(page, 'member A'))); |
| - check(await waitStatus(page, 'Meet cannot reach the call.', 10000), |
| + check(await waitStatus(page, 'Calls cannot reach the call.', 10000), |
| 'the stalled room says something true — status: ' + (await statusText(page))); |
| const hrefs = await page.locator('#status a').evaluateAll((as) => as.map((a) => a.getAttribute('href'))); |
| check(hrefs.includes('/m/' + sqid) && hrefs.includes('/m/' + sqid + '/join'), |
diff --git a/test/browser/native-auth.mjs b/test/browser/native-auth.mjs| index 1d55180..f1c648c 100644 |
| --- a/test/browser/native-auth.mjs |
| +++ b/test/browser/native-auth.mjs |
| @@ -24,9 +24,9 @@ try { |
| process.stdout.write("stage:email-opened\n"); |
| await email.waitForURL('**/native/authorize?*'); |
| if (!(await email.locator("body").innerText()).includes(config.code)) throw Error("confirmation code differs from app"); |
| - await email.getByRole('button', {name:'Sign in to Meet app', exact:true}).click(); |
| + await email.getByRole('button', {name:'Sign in to Calls app', exact:true}).click(); |
| await email.waitForURL('**/native/complete'); |
| - if (!(await email.locator('body').innerText()).includes('Return to the Meet app')) throw Error('missing completion'); |
| + if (!(await email.locator('body').innerText()).includes('Return to the Calls app')) throw Error('missing completion'); |
| process.stdout.write('approved\n'); |
| } finally { |
| await browser.close(); |