新聞中心
怎么開發(fā)app?
APP的入門門檻并不高,但要想做的好,卻并不容易。

創(chuàng)新互聯(lián)公司是專業(yè)的海棠網(wǎng)站建設(shè)公司,海棠接單;提供網(wǎng)站制作、網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行海棠網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
首先需要了解用戶需求,這是APP開發(fā)的第一步,你的用戶是誰,他們需要什么,最需要什么。思考好需求以后,就可以按不同的路線走了。
如下圖所示:
第二步,進行產(chǎn)品的規(guī)格設(shè)計。可以是簡單的框線圖。一旦確定了產(chǎn)品規(guī)格,在APP未正式上線之前,都不會再改動了。除非下定決定推翻重來。
如下圖所示:
第三部,進行產(chǎn)品的視覺設(shè)計,需要使用Photoshop、ai、FW等軟件設(shè)計,現(xiàn)在一般都是平面化的設(shè)計,這種設(shè)計的好處就是用戶對待平面化的審美比較統(tǒng)一,很少會說:“不好看”。
如下圖所示:
第四步,進行產(chǎn)品構(gòu)架,分為前端后后臺,前端就是使用android\ios\等開發(fā)語言按照之前做好的產(chǎn)品規(guī)格進行開發(fā),后臺則是處理業(yè)務(wù)邏輯和為前端提供存儲和查詢的接口。
如下圖所示:
第五步,測試。對APP的功能進行使用,測試是否存在明顯的問題,如果有的話安排時間進行BUG修改。將APP上傳至測試平臺,測試他在上百款手機上的表現(xiàn),并試圖解決最嚴重的缺陷。
第六部,上線。在各大應(yīng)用中心注冊賬戶,上傳APP資料,對外分發(fā)你的APP。
當然android的應(yīng)用市場比較多了,蘋果的只有一個AppStore。
做完這些,APP就開發(fā)完成了。隨著使用的用戶越來越多,根據(jù)用戶反饋,對APP進行完善,還有很多工作要做。
一個APP從構(gòu)思到開發(fā)、上線,要經(jīng)歷的過程還很長,要分析的問題也很多,這里也簡單說一下吧,感興趣可以了解一下:
構(gòu)思APP產(chǎn)品,與每個人的經(jīng)歷、經(jīng)驗、智商、情商、人際網(wǎng)絡(luò)不通,都不一樣。所以也很難說誰對誰錯,但有一點,就是要敢于嘗試,我見過很多人,只知道想,卻能拖了幾年都不行動的。我想等到智能手機從市場上消失了,他可能還在構(gòu)思。
其次,APP項目看似簡單,但實際開發(fā)中的問題卻不少,你需要一個很好的產(chǎn)品經(jīng)理或者是項目經(jīng)理,市場上有很多這種人才,但適合你的可能是百里挑一或千里挑一,如果你本人就是,那你就要做好跟技術(shù)人員的溝通,合理的安排他們的編碼,讓他們找到開發(fā)的樂趣。做項目管控是一門學問,簡單的概括就是“執(zhí)行力”。做好產(chǎn)品規(guī)格和產(chǎn)品開發(fā)計劃,就能嚴格的按照計劃完成,無論遇到什么問題,都可以跨越的能力。
第三,APP上線后,肯定會遇到一個問題,就是根本沒人用你的APP。那么如何推廣和營銷,就成了那個階段的問題。如果你是一個大牛,在社會上能夠一呼百應(yīng),或者是含著金鑰匙的,那可以跳過。如果是一個普通人,就建議從第一個用戶開始。提供給你的用戶,哪怕就一個人,最好的服務(wù),你需要的是讓你的用戶成為你的廣播,口碑相傳。這樣才有可能走的下去。
祝你早日成功。
iOS開發(fā) UIView Animation總結(jié)
最近購入了某米的一臺安卓機,使用了一段時間安卓系統(tǒng)后,發(fā)現(xiàn)iOS系統(tǒng)的動畫效果還是很好的。好吧進入正題
UIView Animation 實際上是對 Core Animation(核心動畫) 的封裝.使用UIView動畫十分簡單
UIViewAnimationOptions 動畫效果枚舉
動畫效果相關(guān)
時間函數(shù)曲線相關(guān)
轉(zhuǎn)場動畫相關(guān)
增加關(guān)鍵幀的方法
UIViewKeyframeAnimationOptions 的枚舉值
關(guān)鍵幀動畫栗子????
單個視圖的過渡效果
從舊視圖轉(zhuǎn)到新視圖的動畫效果
fromView 會從父視圖中移除,并將toView 添加到父視圖中
iOS審核2.1、5.1、3.2被拒流程記錄及解決方法總結(jié)
公司需要新上架的APP基本情況:
1.行業(yè)內(nèi)使用的APP,是客戶定制的產(chǎn)品。
2.App沒有注冊功能,由企業(yè)客戶的超級管理員通過后臺來創(chuàng)建管理員工賬戶。
總體來說經(jīng)歷了三輪被拒后成功上架。
第一輪, 新品上架被拒,蘋果的郵件包含1.回答問題2.提供展示視頻3.info.plist定位的描述不全。
蘋果郵件內(nèi)容:
解決方法:
這里我改了info.plist中的定位功能的描述,重新打包上傳,選擇新的構(gòu)建版本,然后在備注里添加了展示視頻的百度網(wǎng)盤鏈接及密碼,然后重新提交審核。這里操作完后方案解決中心郵件回復的發(fā)送按鈕消失,于是我沒有回答2.1的問題。這里可能是因為選擇了新的構(gòu)建版本重新提交了審核,所以上個版本的問題就結(jié)束了。
第二輪 ,蘋果給了新的郵件,元數(shù)據(jù)被拒,郵件回復即可,先是給了2.1(和第一輪一樣) 然后又給了3.2,判定為內(nèi)部app建議用apple企業(yè)賬號進行分發(fā),最后我給蘋果的回復說app還沒完善后續(xù)會加上注冊功能,目前網(wǎng)頁端可以注冊(怕說平臺超級管理員創(chuàng)建賬戶又被蘋果判斷為內(nèi)部而拒審),結(jié)果蘋果回復讓提供網(wǎng)頁注冊鏈接。。。然后就沒有然后了。
以下是與蘋果的郵件來往回復內(nèi)容:
這次感覺問題就壞在2.1時的回復,還怕人家沒法理解中文,還用了他問題中的用戶類型描述的英文原文,感覺他列舉的常見用戶類型前兩個都不能寫,如果是這兩個中的一個就判定你是內(nèi)部應(yīng)用不能在App Store上架。
解決辦法:
因為3.2后面的對話也進行不下去了,于是在APP Store Connect里刪除APP,換一個BundleID重新上架,保險起見我還更換了APP名稱和圖標。然后等待審核團隊回復。這里參考了 iOS審核被拒Guideline 3.2 - Business、1.2 - Safety
刪除APP的方法:
點擊左側(cè)綜合-App信息,頁面最下方有移除App
第三輪 ,第二次新品上架,審核團隊給了個2.1。
解決方法:
純郵件回復即可,這次要注意避雷,千萬不要說什么定制、指定客戶等敏感詞匯。這次我小心回復,說明了后臺管理賬戶的情況,并截圖了后臺賬戶管理的界面,截圖中標記了提供給審核團隊的測試賬戶,以及標記了添加賬戶按鈕。這次很順利一次通過直接上架了。
以下為與蘋果郵件來往回復內(nèi)容:
解決流程總結(jié):
第一輪 沒有郵件回復2.1問題,修改了2.1指出的plist定位描述問題,5.1提供一個app操作錄屏視頻上傳到百度網(wǎng)盤,在提審界面的備注中留百度網(wǎng)盤鏈接密碼即可。
第二輪 對于2.1的app面向用戶類型以及獲取賬戶方式的回答錯誤,導致后面出現(xiàn)3.2,然后對于3.2的回復繼續(xù)出錯,才采取了刪除app換bundleID上架的解決方法。
第三輪中對于2.1的回答才是正確的。
拒審問題總結(jié):
1.2.1的問題如實回答,但切記如果你還想上架到App Store,就要避免定制、指定用戶等詞匯引導蘋果認為你的app為內(nèi)部使用。
2.關(guān)于用戶如何獲得賬戶,如果app沒有注冊功能,一定要證明你的app是可以通過其它途徑創(chuàng)建賬戶的,并提供充分證明。(參考第三輪中的回復)
3.如果遇到3.2,也不必慌,證明自己的app是提供給普通用戶的,無法通過分發(fā)來安裝,如果你也是沒有注冊功能,解決方法同上2,如果還是被拒就只能刪除app換個BundleID重新上架了。(參考第二輪中的解決方法)
4.關(guān)于要求提供展示視頻,網(wǎng)上有說視頻要上傳到油管,我試了放到百度網(wǎng)盤也是可以通過的,關(guān)于視頻內(nèi)容,盡可能詳盡的展示app的主要功能,一般要求你提供視頻就說明你的app比較復雜或者涉及的不是通用領(lǐng)域,審核人員不知道如何下手,讓審核人員免去費力理解你的app如何使用,以這個為目標自己斟酌如何錄制操作視頻。
iOS開發(fā)中遇到的小問題-----總結(jié)
1、統(tǒng)一收鍵盤的方法
[[[UIApplication sharedApplication] keyWindow] endEditing:YES];
2、提示框
BBAlertView *alert = [[BBAlertView alloc] initWithStyle:BBAlertViewStyleDefault
Title:@"刪除訂單"
message:@"是否刪除訂單,"
customView:nil
delegate:self
cancelButtonTitle:L(@"取消")
otherButtonTitles:L(@"確認")];
[alert setCancelBlock:^{
}];
[alert setConfirmBlock:^{
[self orderDidRemovePressDown:tempDic Index:index.section];
}];
[alert show];
3、圖片的自適應(yīng)功能
self.brandImage.contentMode = UIViewContentModeScaleAspectFit;
4、cocoaPods清除緩存問題
$ sudo rm -fr ~/.cocoapods/repos/master
$ pod setup
5、設(shè)置顯示鍵盤的樣式
textView.keyboardType =UIKeyboardTypeDefault;
//設(shè)置鍵盤右下角為完成(中文輸入法下)
textView.returnKeyType=UIReturnKeyDone;
6、輸出當前時間
NSDateFormatter * dateFormatter=[[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSS"];
NSLog(@"當前毫秒時間1==%@",[dateFormatter stringFromDate:[NSDate date]]);
7、顯示兩秒然后消失
UILabel * lab=[[UILabel alloc]initWithFrame:CGRectMake(60,Main_Screen_Height-64-49-60, Main_Screen_Width-120, 50)];
lab.backgroundColor=[UIColor grayColor];
ViewRadius(lab, 20);
lab.textAlignment=NSTextAlignmentCenter;
lab.text=@"請先進行實名制驗證";
[self.view addSubview:lab];
[UILabel animateWithDuration:2 animations:^{
lab.alpha=0;
}completion:^(BOOL finished) {
[lab removeFromSuperview];
}];
8、設(shè)置placeholder屬性的大小和顏色
[_phoneFie setValue:[UIColor grayColor] forKeyPath:@"_placeholderLabel.textColor"];
[_phoneFie setValue:[UIFont boldSystemFontOfSize:15] forKeyPath:@"_placeholderLabel.font"];
_phoneFie.returnKeyType=UIReturnKeyDone;
9、設(shè)置cell的交互完全不可以使用
//[cellTwo setUserInteractionEnabled:NO];
//設(shè)置cell不可以點擊,但是上面的子控件可以交互
cellTwo.selectionStyle=UITableViewCellSelectionStyleNone;
10、將textField的placeholder 屬性的字體向右邊移動5
_field.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10*Width_375, _field.frame.size.height)];
_field.leftViewMode = UITextFieldViewModeAlways;
11、開新線程使按鈕上的時間變化
-(void)startTime{
__block int timeout=60; //倒計時時間
UIButton * btn=(UIButton *)[self.view viewWithTag:1000];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒執(zhí)行
dispatch_source_set_event_handler(_timer, ^{
if(timeout=0){
dispatch_source_cancel(_timer);
dispatch_async(dispatch_get_main_queue(), ^{
[btn setTitle:@"發(fā)送驗證碼" forState:UIControlStateNormal];
btn.enabled = YES;
});
}else{
//? int minutes = timeout / 60;
int miao = timeout % 60;
if (miao==0) {
miao = 60;
}
NSString *strTime = [NSString stringWithFormat:@"%.2d", miao];
dispatch_async(dispatch_get_main_queue(), ^{
[btn setTitle:[NSString stringWithFormat:@"剩余%@秒",strTime] forState:UIControlStateNormal];
btn.enabled = NO;
});
timeout--;
}
});
dispatch_resume(_timer);
}
12、隱藏TableView 中多余的行
UIView * view=[[UIView alloc]initWithFrame:CGRectZero];
[_tabelView setTableFooterView:view];
13、UIView添加背景圖片
UIImage * image=[UIImage imageNamed:@"friend750"];
headSeV.layer.contents=(id)image.CGImage;
14、UITableView取消選中狀態(tài)
[tableView deselectRowAtIndexPath:indexPath animated:YES];// 取消選中
15、帶屬性的字符串
NSFontAttributeName? 字體
NSParagraphStyleAttributeName? 段落格式
NSForegroundColorAttributeName? 字體顏色
NSBackgroundColorAttributeName? 背景顏色
NSStrikethroughStyleAttributeName 刪除線格式
NSUnderlineStyleAttributeName? ? ? 下劃線格式
NSStrokeColorAttributeName? ? ? ? 刪除線顏色
NSStrokeWidthAttributeName 刪除線寬度
NSShadowAttributeName? 陰影
1.? 使用實例
UILabel *testLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, 320, 30)];
testLabel.backgroundColor = [UIColor lightGrayColor];
testLabel.textAlignment = NSTextAlignmentCenter;
NSMutableAttributedString *AttributedStr = [[NSMutableAttributedString alloc]initWithString:@"今天天氣不錯呀"];
[AttributedStr addAttribute:NSFontAttributeName
value:[UIFont systemFontOfSize:16.0]
range:NSMakeRange(2, 2)];
[AttributedStr addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:NSMakeRange(2, 2)];
testLabel.attributedText = AttributedStr;
[self.view addSubview:testLabel];
16、加大按鈕的點擊范圍
把UIButton的frame 設(shè)置的大一些,然后給UIButton設(shè)置一個小些的圖片
[tmpBtn setImageEdgeInsets:UIEdgeInsetsMake(5, 5, 5, 5)];
// 注意這里不能用setBackgroundImage
[tmpBtn setImage:[UIImage imageNamed:@"testBtnImage"] forState:UIControlStateNormal];
17、//避免self的強引用
__weak ViewController *weakSelf = self;
18、//類別的創(chuàng)建
command +n ——Objective-C File———(File Type? 選擇是類別還是擴展)———(Class? 選擇為哪個控件寫類別)
19、修改UITableview 滾動條顏色的方法
self.tableView.indicatorStyle=UIScrollViewIndicatorStyleWhite;
20、利用UIWebView顯示pdf文件
webView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];
[webView setDelegate:self];
[webView setScalesPageToFit:YES];
[webViewsetAutoresizingMask:UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleHeight];
[webView setAllowsInlineMediaPlayback:YES];
[self.view addSubview:webView];
NSString *pdfPath = [[NSBundle mainBundle]pathForResource:@"ojc" ofType:@"pdf"];
NSURL *url = [NSURLfileURLWithPath:pdfPath];
NSURLRequest *request = [NSURLRequestrequestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:5];
[webView loadRequest:request];
21、將plist文件中的數(shù)據(jù)賦給數(shù)組
NSString *thePath = [[NSBundle mainBundle]pathForResource:@"States" ofType:@"plist"];
NSArray *array = [NSArrayarrayWithContentsOfFile:thePath];
22、隱藏狀態(tài)欄
[[UIApplication shareApplication]setStatusBarHidden: YES animated:NO];
23、給navigation? Bar? 設(shè)置title顏色
UIColor *whiteColor = [UIColor whiteColor];
NSDictionary *dic = [NSDictionary dictionaryWithObject:whiteColor forKey:NSForegroundColorAttributeName];
[self.navigationController.navigationBar setTitleTextAttributes:dic];
24、使用AirDrop 進行分享
NSArray *array = @[@"test1", @"test2"];
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:array applicationActivities:nil];
[self presentViewController:activityVC animated:YES
completion:^{
NSLog(@"Air");
}];
25、把tableview里面Cell的小對勾的顏色改成別的顏色
_mTableView.tintColor = [UIColor redColor];
26、UITableView去掉分割線
_tableView.separatorStyle = NO;
27、正則判斷手機號碼地址格式
- (BOOL)isMobileNumber:(NSString *)mobileNum {
//? ? 電信號段:133/153/180/181/189/177
//? ? 聯(lián)通號段:130/131/132/155/156/185/186/145/176
//? ? 移動號段:134/135/136/137/138/139/150/151/152/157/158/159/182/183/184/187/188/147/178
//? ? 虛擬運營商:170
NSString *MOBILE = @"^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|7[06-8])\\d{8}$";
NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];
return [regextestmobile evaluateWithObject:mobileNum];
}
28、控制交易密碼位數(shù)
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
if (textField.text.length =6){
[MBProgressHUD showMessage:@"密碼為6位" afterDelay:1.8];
return NO;
}
return YES;
}
29、判斷是不是空
if ([real_name isKindOfClass:[NSNull class]] ) {
return NO;}
30、點擊號碼撥打電話
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://400966220"]];
31、控制UITabbar的選擇哪一個
[self.tabBarController setSelectedIndex:1];
32、獲取當前App的版本號
NSDictionary?*infoDictionary?=?[[NSBundle?mainBundle]?infoDictionary];
CFShow(infoDictionary);
//?app名稱
NSString?*app_Name?=?[infoDictionary?objectForKey:@"CFBundleDisplayName"];
//?app版本
NSString?*app_Version?=?[infoDictionary?objectForKey:@"CFBundleShortVersionString"];
//?app?build版本
NSString?*app_build?=?[infoDictionary?objectForKey:@"CFBundleVersion"];
33、蘋果app權(quán)限NSPhotoLibraryUsageDescriptionApp需要您的同意,才能訪問相冊NSCameraUsageDescriptionApp需要您的同意,才能訪問相機NSMicrophoneUsageDescriptionApp需要您的同意,才能訪問麥克風NSLocationUsageDescriptionApp需要您的同意,才能訪問位置NSLocationWhenInUseUsageDescriptionApp需要您的同意,才能在使用期間訪問位置NSLocationAlwaysUsageDescriptionApp需要您的同意,才能始終訪問位置NSCalendarsUsageDescriptionApp需要您的同意,才能訪問日歷NSRemindersUsageDescriptionApp需要您的同意,才能訪問提醒事項NSMotionUsageDescriptionApp需要您的同意,才能訪問運動與健身NSHealthUpdateUsageDescriptionApp需要您的同意,才能訪問健康更新NSHealthShareUsageDescriptionApp需要您的同意,才能訪問健康分享NSBluetoothPeripheralUsageDescriptionApp需要您的同意,才能訪問藍牙NSAppleMusicUsageDescriptionApp需要您的同意,才能訪問媒體資料庫
34、控件設(shè)置邊框
_describText.layer.borderColor = [[UIColor colorWithRed:215.0 / 255.0 green:215.0 / 255.0 blue:215.0 / 255.0 alpha:1] CGColor];
_describText.layer.borderWidth = 1.0;
_describText.layer.cornerRadius = 4.0;
_describText.clipsToBounds = YES;
35、//隱藏電池條的方法
-(BOOL)prefersStatusBarHidden{
return YES;
}
36、延時操作
[NSThread sleepForTimeInterval:2];
方法二:
[self performSelector:@selector(delayMethod) withObject:nil afterDelay:1.5];
37、系統(tǒng)風火輪:
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO; //隱藏
38、//didSelectRowAtIndexPath:方法里面找到當前的Cell
AssessMentCell * cell = [tableView cellForRowAtIndexPath:indexPath];
39、navigation上返回按鈕的顏色以及返回按鈕后面文字去掉
//返回按鈕后邊文字去掉
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60)
forBarMetrics:UIBarMetricsDefault];
//設(shè)置左上角返回按鈕的顏色
self.navigationController.navigationBar.tintColor = UIColorFromRGB(0x666666);
40、lineBreakMode //設(shè)置文字過長時的顯示格式
label.lineBreakMode = NSLineBreakByCharWrapping;以字符為顯示單位顯
示,后面部分省略不顯示。
label.lineBreakMode = NSLineBreakByClipping;剪切與文本寬度相同的內(nèi)
容長度,后半部分被刪除。
label.lineBreakMode = NSLineBreakByTruncatingHead;前面部分文字
以……方式省略,顯示尾部文字內(nèi)容。
label.lineBreakMode = NSLineBreakByTruncatingMiddle;中間的內(nèi)容
以……方式省略,顯示頭尾的文字內(nèi)容。
label.lineBreakMode = NSLineBreakByTruncatingTail;結(jié)尾部分的內(nèi)容
以……方式省略,顯示頭的文字內(nèi)容。
label.lineBreakMode = NSLineBreakByWordWrapping;以單詞為顯示單位顯
示,后面部分省略不顯示。
當前名稱:ios開發(fā)流程總結(jié),ios開發(fā)流程總結(jié)怎么寫
網(wǎng)址分享:http://biofuelwatch.net/article/dsdpieo.html


咨詢
建站咨詢
