新しい会社に入社したばかりで、いくつかの問題に直面しました。記録して共有したいと思います。#
問題 1: インターフェースとコードの対応#
入社したばかりなので、どのインターフェースに対応するコードがどこにあるのかわかりません。さらに、プロジェクトが古くて大きいため、インターフェースとコードの対応を迅速に見つける方法が必要です。これが最初の難題です。
方法:
- 最初に、アプリのすべてのインターフェースをざっと見て、どのようなものがあるかを把握しました。その後、コードの命名を見て、どのインターフェースに対応するかを推測し、正しいかどうかを検証しました。しかし、この方法は非常に疲れるし、コードが古いため、一部のクラスが上書きされ、古いクラスが削除されていないこともあり、対応できない場合もありました。また、効率も非常に低いです。プロジェクトが小さい場合はまだ良いですが、プロジェクトが大きく、時間が限られている場合は、この方法ではうまくいきません。
- その後、夜に帰宅する途中で、以前読んだブログの一つを思い出しました。Method Swizzling と AOP の実践という記事で、各インターフェースに統計情報を追加するために Method Swizzling を使用する方法が紹介されていました。そこで、各インターフェースの情報を表示することもできるはずだと思いました。そこで、Method Swizzling を使用して ViewWillAppear: メソッドを置き換え、各インターフェースが表示されるたびに現在のクラス名を表示するようにしました。これにより、アプリを実行し、インターフェースをクリックするだけで、現在のクラスを簡単に見つけることができます。
問題 2: シミュレータで実行すると問題ないが、ビルドしたものは表示が正しくない#
新しいバージョンを開発し、テストに提供したところ、テストから「表示が正しくない」と指摘されました。それで、注意深く確認してみると、すべての数字の表示が間違っていることが確認されましたが、シミュレータで実行すると正常に動作しているのです。
解決策:
- 最初は証明書の問題だと思いましたが、考えてみるとそれはあまり可能性が低いです。証明書の問題なら、ビルドできないはずで、表示が正しくないはずではありません。次に、ビルド時に何か設定を見落としているのかと考えましたが、特に見つけることはできませんでしたし、特別な設定が必要なことも誰も教えてくれませんでした。
- そこで、エラーの原因を特定する必要がありました。そのため、実機で直接実行しましたが、問題ありませんでした。これは一体何なのでしょうか。
- そして、人に頼んで助けを求めました。考えてみると、ビルドと直接実行に違いがあるとすれば、それはスキームの問題です。そこで、スキームをリリースに変更して直接実行してみましたが、エラーが発生しました...。仕方がないので、スキームをデバッグに戻し、ビルド(ビルドは非常に時間がかかる作業で、コンピューターが遅く、プロジェクトが大きいため、数分待たなければならないことを確認しました。私はアーカイブをクリックしてトイレに行き、戻ってきたらまだコンパイルが終わっていませんでした...)。インストールしてみましたが、表示はまだ正しくありませんでした。泣きたくなりました...。
- そして、テストから催促されたので、近くの人にビルドを手伝ってもらいました。すると、彼がビルドしたものは問題ありませんでした...。だから、確かに私がビルド時に何かを見落としていたのかもしれませんが、見つけることができませんでした。
- 翌日、テストから再びビルドを催促されました。仕方がないので、引き続き調査しました。そして、敵の姿を見つけました - iOS 開発での問題 3--asi フレームワークを使用している場合、xcode で正常に動作するが、ビルド時にはネットワークアクセスができないとasi で ipa をビルドする際の問題。そして、指示に従って修正し、ビルドしてみました。奇跡の瞬間を目撃しました。やった、本当にこの問題だったんです。プロジェクトが古いため、asi を使用していましたが、まだ置き換えていなかったのです。そして、私は以前には使ったことがありませんでしたが、不思議なことに、私の隣の iOS エンジニアは彼のビルド条件に - fno-objc-arc を使用していましたが、ビルドしたものには問題がありませんでした。これは非常に奇妙です!
問題 3: シミュレータで実行すると問題ないが、実機で実行すると問題が発生する#
前の問題を修正したばかりで、夜にテストからバグ報告がありました。リンクをクリックして Web ページに移動しようとすると、読み込みに失敗しますが、Android では問題ありません。
解決策:
- テストが報告してきたとき、シミュレータでは問題がないことを確認しました。テストによると、Android でも問題はないそうです。それで、ビルドに問題があるのかと思いましたが、リンクを百度に変更したところ、問題はありませんでした。
- いつものように、実機でデバッグを行いました。リンクは正しいですが、読み込むことができません。それでは、webView の画面が間違っているのでしょうか(私は新しく入社したので、以前の Web ページの読み込みクラスを使用しています)。ステップバイステップでデバッグを進めていくと、毎回、リンクの後ろに "?source=app" が追加されていることがわかりました。私は賢いですね、コメントアウトして実行しましたが、うまくいきませんでした。その後、バックエンドから、「これはリンクに影響を与えない」と言われたので、コメントを解除しました。
- では、一体何が原因なのでしょうか。バックエンドからは、「他の携帯電話で開けるかどうか試してみてください。このリンクをブラウザにコピーして直接開けますか?」と言われました。それで、試してみたところ、ブラウザでも開けませんでした。他のテスト機で試してみると、開けることがわかりました。そうです、テストは他の携帯電話を見ていなかったのです...(補足:私の携帯電話はまだテストアカウントに追加されていないため、使用できません)。しかし、私の携帯電話は明らかにインターネットに接続しているので、なぜうまくいかないのでしょうか?なぜなのでしょうか?
- しかし、これは私の問題ではありません。なぜこんなに長い時間をかけて修正しなければならなかったのでしょうか?なぜなのでしょうか?